我的桌面上有一个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.ps1out.txt:
Some output
Some more outputerr.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。我怎样才能做到这一点?
发布于 2014-06-28 02:00:05
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.txthttps://stackoverflow.com/questions/24462922
复制相似问题