Ich möchte ein Programm in einer Schleife wiederholt ausführen.Powershell Start Prozess, Warte mit Timeout, Kill und Get Exit Code
Manchmal stürzt das Programm ab, also möchte ich es töten, damit die nächste Iteration korrekt starten kann. Ich ermittle dies über Timeout.
Ich habe das Timeout funktioniert aber kann nicht den Exit-Code des Programms, die ich auch, um sein Ergebnis zu bestimmen.
Vorher habe ich nicht mit Timeout gewartet, sondern nur -warte in Start-Process, aber das hat das Skript hängen gelassen, wenn das gestartete Programm abgestürzt ist. Mit diesem Setup konnte ich den Exit-Code jedoch korrekt erhalten.
Ich ausführe von 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
}
}
Wie kann ich
- starten Prozess
- warten, bis es ordentlich auszuführen und
- es Töten beenden, wenn es abgestürzt ist (zB schlägt Timeout)
- get Exit-Code des Prozesses
[Wie warten und einen Timeout-Prozess in Powershell töten] (https: //stackoverflow.com/q/19532998/995714) –