重定向StandardError时从PowerShell中的Process获取ExitCode

时间:2018-01-17 20:41:59

标签: powershell exit-code

我目前正在开发包含

行的PowerShell脚本

$process1 = Start-Process -FilePath ($exePath1) -PassThru -RedirectStandardError ($logPath1)

启动长时间运行的进程并将进程的StandardError重定向到日志文件。我的问题是,这显然也会干扰ExitCode。

$process1.ExitCode
进程退出后,

返回null。如果我删除“RedirectStandardError($ logPath1)”,则ExitCode返回我的虚拟程序应该返回的值。

我应该做些不同的事吗?我希望能够启动该过程(将StandardError重定向到日志文件以进行诊断),等待几秒钟以确保它不会崩溃,并在它发生的情况下检索ErrorCode。

1 个答案:

答案 0 :(得分:1)

如果您需要等待该过程,并且您没有以其他用户身份运行它:

$StartParams = @{
    FilePath = $exePath1
    RedirectStandardError = $logPath1
    PassThru = $True
    Wait = $True
}
$ReturnCode = (Start-Process @StartParams).ExitCode

由于它是长期运行的,这里是PSJobs的另一种方法:

$Job = Start-Job -ScriptBlock {
    $StartParams = @{
        FilePath = $exePath1
        RedirectStandardError = $logPath1
        PassThru = $True
        Wait = $True
    }
    (Start-Process @StartParams).ExitCode
}
If ($Job.State -eq 'Completed')
{
    $ReturnCode = Receive-Job -Job $Job
}