私は、Start-Process
コマンドでOpenCover.Console.exeを呼び出すPowerShellスクリプトから実行している一連のテストDLLを持っています。
私は-returntargetcode
旗を持っているが、私は$lastexitcode
と$?
を確認し、実行した後
を設定します。彼らは常に1とTrueを返します。テストが失敗しても。
$lastexitcode
はすべてのテストに合格すると0になり、失敗した場合に1になるはずですか?
私は、Start-Process
コマンドでOpenCover.Console.exeを呼び出すPowerShellスクリプトから実行している一連のテストDLLを持っています。
私は-returntargetcode
旗を持っているが、私は$lastexitcode
と$?
を確認し、実行した後
を設定します。彼らは常に1とTrueを返します。テストが失敗しても。
$lastexitcode
はすべてのテストに合格すると0になり、失敗した場合に1になるはずですか?
デフォルトでは、Start-Process
は非同期なので、プロセスが終了するのを待っていません。コマンドラインツールを同期して実行する場合は、Start-Process
をドロップして、コマンドを直接呼び出します。それが$LASTEXITCODE
を設定する唯一の方法です。
cmd /c exit 2
$LASTEXITCODE
あなたは-Wait
フラグを追加することにより、Start-Process
synchonousを作ることができ、それはまだ文句を言わない」$ LASTEXITCODEを設定します。たとえば、原因CMD.EXEは2で終了します。 ExitCodeをStart-Processから取得するには、Start-Process
に-PassThru
を追加します。[System.Diagnostics.Process]
オブジェクトを出力します。このオブジェクトを使用してプロセスを監視し、最終的にそのExitCode
プロパティにアクセスします。それはあなたがそれを$p
で実行されますについての情報を持って終了したときに、後で
$p = Start-Process "cmd" -ArgumentList "/c exit 2" -PassThru -Wait
$p.ExitCode
もちろん、このアプローチの利点は、あなたがプロセスを待つ必要はありませんが、:ここでは役立つはず例です。
それは私のためにそれを固定した - パススルーでした!ありがとう – lucas