Exception PowerShell:don';无法发送到STDERR,如何记录它们?
我的桌面上有一个PowerShell脚本: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
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
问一个你显然知道答案的问题有什么意义?如果你想分享这样的信息,博客可能是一个更好的途径。