这必须是一个非常简单的解决方案,但我不能为我的生活找出如何将错误/警告重定向到标准输出。
现在,我通过将其分配给变量来捕获输出的内容,而不必担心格式化等,例如:
$buffer += Whatever-Cmdlet
但我想做的是将任何错误消息捕获到该变量中。喜欢做2>& 1。
有没有办法让这项工作?我试过了:
$buffer += Whatever-Cmdlet 2>&1
没有成功。
感谢您的帮助!
答案 0 :(得分:2)
未经彻底测试,但
$buffer += Whatever-Cmdlet -WarningVariable +buffer -ErrorVariable +buffer
如果你有v3 / 4:
$PSDefaultParameterValues=@{"*:WarningVariable"="+buffer";"*:ErrorVariable"="+buffer";}
在设置之后,应该为您运行的所有cmdlet执行此操作。
答案 1 :(得分:0)
实际上,只要你输出输出结果就是结果:
$buffer += Whatever-Cmdlet 2>&1 | Out-String
似乎有效。谢谢!
答案 2 :(得分:0)
这取决于您运行的PowerShell版本。在PowerShell v2中,警告会写入主机,因此无法在变量中捕获。在PowerShell v3中,警告被写入单独的输出流,因此您必须重定向警告流以及错误流以捕获错误和警告:
$buffer += Whatever-Cmdlet 2>&1 3>&1 | Out-String
有关详细信息,请参阅Get-Help about_Redirection
。