ループ内でプログラムを繰り返し実行したいですか?Powershellプロセスの開始、タイムアウトの待機、終了コードの取得
プログラムがクラッシュすることがあるので、次の繰り返しが正しく開始できるように、プログラムを強制終了します。私はタイムアウトを介してこれを判断します。
タイムアウトはありますが、プログラムの終了コードを取得できません。プログラムの終了コードも取得できません。その結果を判断する必要があります。
私はタイムアウトを待つことなく、Start-Processで使用しましたが、起動したプログラムがクラッシュした場合にスクリプトがハングしました。この設定では、私は正しく終了コードを得ることができます。
私はISEから実行しています。
for ($i=0; $i -le $max_iterations; $i++)
{
$proc = Start-Process -filePath $programtorun -ArgumentList $argumentlist -workingdirectory $programtorunpath -PassThru
# wait up to x seconds for normal termination
Wait-Process -Timeout 300 -Name $programname
# if not exited, kill process
if(!$proc.hasExited) {
echo "kill the process"
#$proc.Kill() <- not working if proc is crashed
Start-Process -filePath "taskkill.exe" -Wait -ArgumentList '/F', '/IM', $fullprogramname
}
# this is where I want to use exit code but it comes in empty
if ($proc.ExitCode -ne 0) {
# update internal error counters based on result
}
}
はどうすればよい
- スタートそのためのプロセス
- 待ち秩序へ
- を実行し、終了し、それがクラッシュした場合
- が終了コードを取得する(例えば、タイムアウトに当たる)それを殺しますプロセス
[待ってPowerShellでタイムアウト処理を殺す方法](HTTPS:あなたは、あなたではなく、単に内部エラーカウンタを更新する必要があり、この場合の終了コードを取得することができなくなりますので、注意してください: //stackoverflow.com/q/19532998/995714) –