Exception PowerShell:don';无法发送到STDERR,如何记录它们?

Exception PowerShell:don';无法发送到STDERR,如何记录它们?,exception,powershell,cmd,pipe,stderr,Exception,Powershell,Cmd,Pipe,Stderr,我的桌面上有一个PowerShell脚本: Write-Output "Some output" Write-Error "Non-fatal error" $ErrorActionPreference = "Stop" # Any further errors should be treated as fatal Write-Output "Some more output" Write-Error "Fatal error" 我这样称呼它是从powershell.exe: PS C:\Us

我的桌面上有一个PowerShell脚本:

Write-Output "Some output"
Write-Error "Non-fatal error"
$ErrorActionPreference = "Stop" # Any further errors should be treated as fatal
Write-Output "Some more output"
Write-Error "Fatal error"
我这样称呼它是从
powershell.exe

PS C:\Users\me\Desktop> .\test.ps1 2> err.txt 1> out.txt
输出:

C:\Users\vmadmin\Desktop\test.ps1 : Fatal error
At line:1 char:1
+ .\test.ps1 2> err.txt 1> out.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,test.ps1
out.txt:

Some output
Some more output
err.txt:

C:\Users\vmadmin\Desktop\test.ps1 : Non-fatal error
At line:1 char:1
+ .\test.ps1 2> err.txt 1> out.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,test.ps1

我希望将致命错误记录到err.txt。如何实现这一点?

PowerShell有两个不同的错误处理通道:第一个通道是
STDERR
,用于写入非致命错误。第二种是异常机制,类似于在C#或Java等编程语言中看到的

诀窍在于:任何错误都可能出现在一个通道或另一个通道中,绝不可能同时出现在两个通道中。这意味着致命错误不会通过STDERR

这里有一个解决方法:将PowerShell调用包装在cmd调用中。由于cmd语言没有异常,任何经过它的PowerShell异常都会通过管道传输到
STDERR

用法示例:

PS C:\Users\me\Desktop> cmd.exe /c "powershell.exe .\test.ps1" 2> err.txt 1> out.txt

问一个你显然知道答案的问题有什么意义?如果你想分享这样的信息,博客可能是一个更好的途径。