2016-09-14 7 views
0

私は、Start-ProcessコマンドでOpenCover.Console.exeを呼び出すPowerShellスクリプトから実行している一連のテストDLLを持っています。

私は-returntargetcode旗を持っているが、私は$lastexitcode$?を確認し、実行した後

を設定します。彼らは常に1とTrueを返します。テストが失敗しても。

$lastexitcodeはすべてのテストに合格すると0になり、失敗した場合に1になるはずですか?

答えて

3

デフォルトでは、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 

もちろん、このアプローチの利点は、あなたがプロセスを待つ必要はありませんが、:ここでは役立つはず例です。

+0

それは私のためにそれを固定した - パススルーでした!ありがとう – lucas

関連する問題