在一次运行中,是否可以将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中的错误。