让Start-Process在PSSession中等待

时间:2013-05-30 11:30:30

标签: powershell powershell-v3.0 powershell-remoting

我正在尝试在远程会话中运行exe,并在执行后访问结果

如果我在当地尝试:

Invoke-Command  -ScriptBlock { Start-Process -FilePath ping -ArgumentList "1.1.1.1 -n 5 -w 3000" -NoNewWindow -Wait -PassThru  }

进程是一个长时间运行的ping:

  Start-Process -FilePath ping -ArgumentList "1.1.1.1 -n 5 -w 3000" -NoNewWindow -Wait -PassThru

我得到输出,然后等待。但是如果我将相同的命令应用于会话(在创建New-PSSession之后)

Invoke-Command  -Session $serviceSession  -ScriptBlock { Start-Process -FilePath ping -ArgumentList "1.1.1.1 -n 5 -w 3000" -NoNewWindow -Wait -PassThru  }

它会马上回来。 我如何得到这个结果。我真的想使用Start-Process,因为我可以从进程中访问ExitCode。我发现$ LASTEXITCODE对于我想要使用的exe是不可靠的。

1 个答案:

答案 0 :(得分:1)

如果你打算使用Start-Process -PassThru,你需要将它分配给一个变量,这样你就可以检查进程的退出代码,例如:

{ $p = Start-Process ... -Wait -PassThru; $p.ExitCode }

那就是说,我对$ LastExitCode没有任何问题,并发现像这样的解决方案效果很好:

$res = icm acme1 { $r = ping.exe 1.1.1.1 -n 5 -w 3000; [pscustomobject]@{Output=$r;ExitCode=$LastExitCode} }

$res
$res.ExitCode
$res.Output