首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell:致命的错误不会被发送到STDERR,如何记录它们?

PowerShell:致命的错误不会被发送到STDERR,如何记录它们?
EN

Stack Overflow用户
提问于 2014-06-28 02:00:05
回答 1查看 838关注 0票数 1

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

代码语言:javascript
复制
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这边走

代码语言:javascript
复制
PS C:\Users\me\Desktop> .\test.ps1 2> err.txt 1> out.txt

输出:

代码语言:javascript
复制
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:

代码语言:javascript
复制
Some output
Some more output

err.txt:

代码语言:javascript
复制
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。我怎样才能做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-28 02:00:05

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

诀窍是:任何错误都存在于一个或另一个通道中,而不是两者兼而有之。这意味着致命错误不会通过STDERR

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

示例用法:

代码语言:javascript
复制
PS C:\Users\me\Desktop> cmd.exe /c "powershell.exe .\test.ps1" 2> err.txt 1> out.txt
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24462922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档