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をフォーマットします。
何か助けや指針をいただければ幸いです!
'powerShell.AddScript(COMAND);' - > 'powerShell.AddScript(comand)。AddCommand( "Out-String"); ' – PetSerAl
@PetSerAI Huh、resultsList(\ r \ nで区切られた行)の位置0に1つの大きなテキストブロックが表示されているようですが、これは半作業ですが必要になります別のPowershellコマンドの結果を調べる余分な時間がたくさんあるので、私はそれを一つの大きな行に入れているかどうかを調べることができます。あなたはそれを行うより一貫した方法を知っていることはありませんか? – Erik
何と一致しますか? PowerShellと同じ結果をコンソールに出力したい場合は、PowerShellの書式設定システムを使ってオブジェクトを渡す必要があります。これはもう少し複雑で、obj.ToString()だけです。 'Out-String'はそれだけで文字列を返します。あなたが何か他のものを望むなら、正確に何を望んでいると言う必要があります。 – PetSerAl