Capture-Programm stdout und stderr zu getrennten Variablen

Ist es möglich, umleiten von stdout von einem externen Programm eine variable und stderr von externen Programmen, um eine andere variable in einem run?

Beispiel:

$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!";
}

Einem dummen Beispiel allerdings Frage ich mich, ob das möglich ist?

  • Sie konnte mit Start-Prozess zu führen myprogram.exe wie hier beschrieben. Es fängt STDOUT und STDERR getrennt.
InformationsquelleAutor dusz | 2014-06-14
Schreibe einen Kommentar