Capture program stdout and stderr to separate variables

后端 未结 5 1410
小蘑菇
小蘑菇 2020-11-28 10:29

Is it possible to redirect stdout from an external program to a variable and stderr from external programs to another variable in one run?

For example:



        
5条回答
  •  心在旅途
    2020-11-28 10:52

    This is also an alternative that I have used to redirect stdout and stderr of a command line while still showing the output during PowerShell execution:

    $command = "myexecutable.exe my command line params"
    
    Invoke-Expression $command -OutVariable output -ErrorVariable errors
    Write-Host "STDOUT"
    Write-Host $output
    Write-Host "STDERR"
    Write-Host $errors
    

    It is just another possibility to supplement what was already given.

    Keep in mind this may not always work depending upon how the script is invoked. I have had problems with -OutVariable and -ErrorVariable when invoked from a standard command line rather than a PowerShell command line like this:

    PowerShell -File ".\FileName.ps1"
    

    An alternative that seems to work under most circumstances is this:

    $stdOutAndError = Invoke-Expression "$command 2>&1"
    

    Unfortunately, you will lose output to the command line during execution of the script and would have to Write-Host $stdOutAndError after the command returns to make it "a part of the record" (like a part of a Jenkins batch file run). And unfortunately it doesn't separate stdout and stderr.

提交回复
热议问题