Как часть скрипта Powershell мне нужно выполнить задачу, которая обычно быстра, но иногда может занимать много времени. Я хочу выполнить задачу, а затем подождать или для ее завершения sh или в течение установленного времени, в зависимости от того, что произойдет раньше. Когда возникает какое-либо условие, мне нужен сценарий Powershell для возврата обратно в командную строку.
Вот наиболее близкий вариант, который я придумал (используя ping в качестве примера)
$x = Start-Process -Filepath "ping" -ArgumentList 'google.com -n 100' -NoNewWindow -PassThru;
Start-Sleep -Seconds 5;
try { Stop-Process -Id $x.Id -ErrorAction stop } catch {};
Это убьет процесс после достижения тайм-аута (если он все еще работает) и вернется к приглашению. Однако он не вернется к приглашению, если команда успешно завершится до истечения времени ожидания. Это приводит к тому, что сценарий всегда занимает столько времени, сколько указано в значении времени ожидания.
Желаемая семантика аналогична или идентична команде Linux s timeout .
Требования:
- Если задача завершается в течение времени ожидания, управление возвращается к сценарию (отображается приглашение)
- Если время ожидания истекло, и задача все еще выполняется, задача уничтожается, и управление возвращается к сценарию (отображается приглашение)
- Вывод задания должен быть распечатан / отображен на стандартный вывод
- Работает через соединение S SH