Búsqueda de sitios web

PowerShell: esperando a que se completen los trabajos con Wait-Job


El cmdlet Wait-Job espera hasta que uno o todos los trabajos de PowerShell que se ejecutan en la sesión estén en estado de finalización. En esta publicación de blog, te mostraré un ejemplo sobre el que puedes desarrollar. Empecemos.

Start-Job crea uno o más trabajos en segundo plano de PowerShell. Estos trabajos se ejecutan ocultos en segundo plano y le permiten continuar su trabajo en PowerShell. Este ejemplo inicia un trabajo en segundo plano de exploración de puertos.

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

Para mostrar los resultados de este trabajo, ejecute Recibir-Trabajo. ¡Tenga en cuenta que puede mostrar el resultado solo una vez! A menos que utilice el parámetro -Keep.

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

Espera hasta que uno o todos los trabajos de PowerShell que se ejecutan en la sesión estén en estado de finalización.

Microsoft lo describe de esta manera:

El cmdlet Wait-Job espera a que un trabajo esté en estado de finalización antes de continuar con la ejecución. Los estados terminales son:

  • Terminado
  • Fallido
  • Interrumpido
  • Suspendido
  • Desconectado

Puede esperar hasta que un trabajo específico o todos los trabajos estén en estado de finalización. También puede establecer un tiempo de espera máximo para el trabajo usando el parámetro Tiempo de espera o usar el parámetro Forzar para esperar un trabajo en el estado Suspended. o estados Desconectado .

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

A continuación se muestra un ejemplo de cómo se crean 2 puestos de trabajo. Esperando el segundo trabajo, que lleva mucho tiempo. Ambos trabajos no están relacionados, pero son buenos para realizar pruebas. Finalmente, se llama al segundo trabajo, pero sólo cuando se ha completado el primer trabajo.

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

Espero que esto haya sido útil y que ahora pueda implementar el cmdlet Wait-Job en sus scripts de PowerShell.

Artículos relacionados