Proceso de inicio de Powershell, esperar con tiempo de espera, matar y obtener el código de salida
Quiero ejecutar repetidamente un programa en un bucle.
A veces, el programa se bloquea, por lo que quiero matarlo para que la próxima iteración pueda comenzar correctamente. Determino esto a través del tiempo de espera.
Tengo el tiempo de espera funcionando pero no puedo obtener el código de salida del programa, que también necesito para determinar su resultado.
Antes, no esperaba con el tiempo de espera, solo usaba -wait en Start-Process, pero esto hacía que el script se bloqueara si el programa iniciado fallaba. Sin embargo, con esta configuración pude obtener correctamente el código de salida.
Estoy ejecutando desde 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
}
}
Cómo puedo
Iniciar un procesoEspere a que se ejecute ordenadamente y termineMátalo si está bloqueado (p. Ej., Tiempo de espera excedido)obtener el código de salida del proceso