2013-12-13 86 views
1

這必須是一個非常簡單的解決方案,但我不能爲我的生活找出如何將錯誤/警告重定向到標準輸出。重定向cmdlet警告/錯誤輸出?

現在,我被分配給一個變量捕捉的東西輸出,而不用擔心格式等,因此,例如:

$buffer += Whatever-Cmdlet 

但我想這樣做也捕捉任何錯誤消息到該變量。喜歡做2> & 1.

有沒有什麼辦法讓這項工作?我曾嘗試:

$buffer += Whatever-Cmdlet 2>&1 

沒有成功。

感謝您的幫助!

回答

0

實際上,它只要證明你管的輸出:

$buffer += Whatever-Cmdlet 2>&1 | Out-String 

看來工作。謝謝!

+0

是的,這正是你如何使用.EXE。但是,這不適用於cmdlet。換句話說,像'get-process 2>&1'這樣的東西不會做你所描述的,但是'cmd/c type myfile.txt 2>&1'會。 –

2

不徹底的測試,但

$buffer += Whatever-Cmdlet -WarningVariable +buffer -ErrorVariable +buffer 

,如果你有V3/4:你設置後

[email protected]{"*:WarningVariable"="+buffer";"*:ErrorVariable"="+buffer";} 

應該做的所有的cmdlet的運行。

+0

沒有看到帶有WarningVariable和ErrorVariable的「+」語法。 –

+0

請注意,使用PSDefaultParameterValues需要V3或更高版本。 –

0

這取決於您正在運行的是哪個版本的PowerShell。在PowerShell v2中,警告被寫入主機,因此無法在變量中捕獲。在PowerShell中v3的警告被寫入到一個單獨的輸出流,所以你必須重定向警告流和錯誤流捕獲錯誤和警告:

$buffer += Whatever-Cmdlet 2>&1 3>&1 | Out-String 

更多信息請參見Get-Help about_Redirection