在一次运行中,是否可以将stdout从外部程序重定向到外部程序中的变量和stderr?
例如:
$global:ERRORS = @(); $global:PROGERR = @(); function test(){ # Can we redirect errors to $PROGERR here,leaving stdout for $OUTPUT? $OUTPUT = (& myprogram.exe 'argv[0]','argv[1]'); if ( $OUTPUT | select-string -Pattern "foo" ) { # do stuff } else { $global:ERRORS += "test(): oh noes! 'foo' missing!"; } } test; if ( @($global:ERRORS).length -gt 0 ) { Write-Host "Script specific error occurred"; foreach ( $err in $global:ERRORS ) { $host.ui.WriteErrorLine("err: $err"); } } else { Write-Host "Script ran fine!"; } if ( @($global:PROGERR).length -gt 0 ) { # do stuff } else { Write-Host "External program ran fine!"; }
一个沉闷的例子,但我想知道是否可能?
最简单的方法是使用stderr输出文件,例如:
$output = & myprogram.exe 'argv[0]','argv[1]' 2>stderr.txt $err = get-content stderr.txt if ($LastExitCode -ne 0) { ... handle error ... }
我还将使用$ LastExitCode来检查本机控制台exes中的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。