Поиск по сайту:

PowerShell: Ожидание завершения задач с помощью Wait-Job


Командлет Wait-Job дожидается, пока одна или все задачи PowerShell, выполняющиеся в сессии, не перейдут в состояние завершения. В этом блоге я покажу вам пример, на основе которого вы сможете построить свое. Давайте начнем.

Start-Job создает одну или несколько фоновых задач PowerShell. Эти задачи выполняются скрыто в фоновом режиме и позволяют вам продолжать работу в PowerShell. Этот пример запускает фоновую задачу сканирования порта.

Start-Job -Name PortScan -ScriptBlock {Test-NetConnection 192.168.0.150 -Port 88}
Get-Job -Name PortScan

Чтобы отобразить результаты этой задачи, выполните Receive-Job. Обратите внимание, что вы можете отобразить результат только один раз! Если только вы не используете параметр -Keep.

Receive-Job -Name PortScan -Keep | Select-Object RemoteAddress,PingSucceeded,TcpTestSucceeded

Ждет, пока одна или все задачи PowerShell, выполняющиеся в сессии, не перейдут в состояние завершения.

Microsoft описывает это так:

Cmdlet Wait-Job ожидает, пока задание не перейдет в состояние завершения, прежде чем продолжить выполнение. Завершающие состояния:

  • Завершено
  • Не удалось
  • Остановлено
  • Приостановлено
  • Отключен

Вы можете подождать, пока указанная задача или все задачи не окажутся в состоянии завершения. Вы также можете установить максимальное время ожидания для задачи, используя параметр Timeout, или использовать параметр Force, чтобы подождать задачу в состоянии Suspended или Disconnected.

https://learn.microsoft.com/ru-ru/powershell/module/microsoft.powershell.core/wait-job?view=powershell-7.3

Вот пример того, как создаются 2 задачи. Ожидание второй задачи, которая занимает очень много времени. Обе задачи не связаны, но хороши для тестирования. Наконец, вторая задача вызывается, но только после завершения первой задачи.

Get-Job | Remove-Job -Force

Start-Job -Name PortScan -ScriptBlock {Test-NetConnection 192.168.0.150 -Port 88}
Start-Job -Name Files -ScriptBlock {Get-ChildItem C:\Windows -File -Recurse}
Wait-Job -Name Files
Receive-Job -Name PortScan -Keep | Select-Object RemoteAddress,PingSucceeded,TcpTestSucceeded

Надеюсь, это было полезно, и теперь вы можете использовать командлет Wait-Job в своих скриптах PowerShell.