2017-12-10 15 views
1

Powershellのいくつかを実行するC#アプリケーションを作成していますが、Powershellコマンドの正しい/すべての結果を収集していないようです。C#&Powershell:すべてのPowershell結果を返さない

以下のコード:で

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     List<string> results = RunScript("Get-ADUser testuser2 -Properties *"); 
     this.ShowMessageAsync("OK",results[0]); 
    } 

    private List<string> RunScript(string comand) 
    { 
     var powerShell = PowerShell.Create(); 
     powerShell.Runspace = runspace; 
     powerShell.AddScript(comand); 

     Collection<PSObject> results = powerShell.Invoke(); 
     List<string> resultsList = new List<string>(); 

     if (powerShell.Streams.Error.Count > 0) 
     { 
      this.ShowMessageAsync("Something went wrong!", "Check error log for details!"); 
      runspaceBox.AppendText(powerShell.Streams.Error[0] + "\r\n"); 
     } 

     else 
     { 
      foreach (PSObject obj in results) 
      { 
       runspaceBox.AppendText(obj.ToString() + "\r\n"); 
       resultsList.Add(obj.ToString()); 
      } 
     } 
     return resultsList; 
    } 


結果:

{CN = testuser2、DC = TESTDOMAIN、DC = COM}

コマンドを置く


Powershellに直接入ります。

PS Cは:\ユーザーは\究極-V1>は、Get-ADUser testuser2 -Properties *

説明[上記の余分なものの束]:

のDisplayName:テストユーザー2

識別名:CN =テスト 一つ、CN DC、ユーザーを= = TESTDOMAIN、DC = comの

部門:

DoesNotRequirePreAuth:偽

[下の余分なものをたくさん]


私はそれが非常に長いと上記のコマンドのうち、結果の多くを切り取らしました。

私がうまくいかないのは、結果がすべてではなく識別名を返すだけなのです。これはいくつかのコマンドで起こりますが、他のコマンドでは起こりません。ユーザー上のすべてのADグループを返すコマンドは、たとえば正常に動作します。

可能であれば、私はコマンドが返すすべてを持っているのが好きです。コードの後ろにresultsListをフォーマットします。

何か助けや指針をいただければ幸いです!

+2

'powerShell.AddScript(COMAND);' - > 'powerShell.AddScript(comand)。AddCommand( "Out-String"); ' – PetSerAl

+0

@PetSerAI Huh、resultsList(\ r \ nで区切られた行)の位置0に1つの大きなテキストブロックが表示されているようですが、これは半作業ですが必要になります別のPowershellコマンドの結果を調べる余分な時間がたくさんあるので、私はそれを一つの大きな行に入れているかどうかを調べることができます。あなたはそれを行うより一貫した方法を知っていることはありませんか? – Erik

+0

何と一致しますか? PowerShellと同じ結果をコンソールに出力したい場合は、PowerShellの書式設定システムを使ってオブジェクトを渡す必要があります。これはもう少し複雑で、obj.ToString()だけです。 'Out-String'はそれだけで文字列を返します。あなたが何か他のものを望むなら、正確に何を望んでいると言う必要があります。 – PetSerAl

答えて

1

結果を文字列としてキャストしたので、複雑なオブジェクトの文字列表現(オブジェクトの.ToString()メソッドの結果に関係なく)が得られます。

PowerShell自体では、すべてを文字列にキャストして表示しません。オブジェクトを一般的にどのように表示するか(通常は表またはリスト形式)に関するさまざまなルールがあり、一部のタイプには特定のフォーマッタがあります。

PetSerAlはすでにコメントで答えたが、PowerShellはコンソールに表示される内容の文字列表現を取得する方法はOut-Stringを通して、あなたの出力を送信することです:

powerShell.AddScript(comand).AddCommand("Out-String"); 
関連する問題