我想將除流1(成功)之外的所有PowerShell cmdlet輸出重定向到文件。我怎樣才能做到這一點?我知道如何實現重定向個人流,我知道如何將它合併到標準輸出,但我不想混亂標準輸出。我只想將流2,3,4和(可選)5捕獲到一個文件中。我正在使用Windows平臺。將除成功流以外的所有輸出流重定向到文件
作爲例子,我用下面的命令:
@('c:\temp\', 'c:\temp2\') | % {Get-ChildItem $_}
我有C:裏面的一些文件\ Temp文件夾,我沒有C:\ TEMP2文件夾中。所以我在文件中的預期輸出是隻獲得有關缺少文件夾temp2的錯誤。
我試着給一個變量賦值,但沒有幫助。正常分配不會生成輸出,但一旦出現重定向輸出。
($Files = @('c:\temp\', 'c:\temp2\') | % {Get-ChildItem $_}) *>err.txt
沒有重定向,我只看到c:\ temp2不存在的錯誤。但是一旦重定向,來自C:\ temp的文件列表出現在err.txt中。並且,它出現在文件的末尾。此外,在ISE環境中的$Files
不會發生!?在其他主機中,賦值工作正常,但重定向也將文件添加到輸出。
如果我嘗試重定向爲3>err.txt 2>err.txt
,則它將失敗:進程無法訪問文件err.txt,因爲它正在被另一個進程使用。
不支持合併到除1以外的任何其他流。此嘗試3>&2 2>err.txt
給出了錯誤:'3> & 2'運算符保留供將來使用。
我能夠用Start-Transcript
做些事情,但是這會創建額外的文本,並且會用不必要的文本填充輸出文件。
我閱讀下面的文章,但我沒有找到合適的答案
- about_redirection
- Understanding Streams, Redirection, and Write-Host in PowerShell
- Stack Overflow question: Redirect two or more Powershell streams other than output stream to the same file