我正在尝试在远程会话中运行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是不可靠的。
答案 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