PowerShellで外部プロセスを実行して終了コードを取得する方法
あらすじ
Start-Processで実行した外部プロセスの終了コードのプロパティが存在せず取得できない問題に直面。
参考
- powershell – Obtaining ExitCode using Start-Process and WaitForExit instead of -Wait – Stack Overflow
- .net – Start-Process / System.Diagnostics.Process ExitCode is $null with -NoNewWindow – Stack Overflow
方法
Start-Processのオプションに -PassThru
をつけるとExitCodeがnullにならなくなる。
ただしこの方法だと外部プロセスの実行速度が遅くなり(理由は未調査…。)、
Forループ等で何回も実行する場合に問題が出るため次のように-Wait
オプションを抜いてプロセスハンドルをキャッシュして対処する。
おわい
PowerShell経験が年齢に伴っていないので、なぜWaitを入れると実効速度低下につながるか、
なぜプロセスハンドルをキャッシュするとExitCodeがnullにならないかをちゃんとした理由を調べる必要があります。
おわい