2014-02-07 82 views
3

我正在實現自定義PowerShell主機,我需要讀取PowerShell腳本的標準輸出和標準錯誤。問題是,當我將通過調用管道返回的對象轉換爲字符串時,我沒有得到stdout。但是,當我將「out-string」cmdlet添加到管道時,它工作得很好。有沒有什麼辦法可以在不使用「out-string」的情況下獲取stdout和stderror?如何從C#讀取PowerShell腳本標準輸出和標準錯誤#

this.currentPowerShell.AddScript(cmd); 
Collection<PSObject> results = this.currentPowerShell.Invoke(); 
foreach (PSObject obj in results) 
{ 
     Console.WriteLine(obj.ToString()); 
} 

當我使用上面的代碼時,我只能得到部分標準輸出。

+0

您能否詳細說明您目前獲得的輸出以及您的期望? – tnw

回答

4

PowerShell的stdout輸出到另一個exe是通過合併對象並投影它們的字符串視圖。 PowerShell的本地輸出是一個對象流。如果你想要這些對象的字符串版本,然後使用Out-String。但是,從C#角度來看,直接處理PowerShell輸出的對象通常更有用。

對於stderr,您可以從PowerShell.Streams.Error屬性中讀取ErrorRecords。如果您還想爲這些人設置可讀的字符串,請在輸出給用戶之前通過Out-String運行它們。