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  }

それはすぐに戻ります。この結果を取得するにはどうすればよいですか。プロセスから ExitCode にアクセスできるため、本当に Start-Process を使用したいと考えています。$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 に答える