0

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

4

1 回答 1

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
于 2013-05-30T20:15:08.433 回答