Wait-Job
Espera hasta que uno o todos los trabajos de PowerShell que se ejecutan en la sesión estén en un estado de terminación.
Sintaxis
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Id] <Int32[]>
[<CommonParameters>]
Wait-Job
[-Job] <Job[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Name] <String[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-InstanceId] <Guid[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-State] <JobState>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Filter] <Hashtable>
[<CommonParameters>]
Description
El cmdlet Wait-Job
espera a que un trabajo esté en un estado de terminación antes de continuar la ejecución.
Los estados de terminación son:
- Completado
- Fracasado
- Detenido
- Suspendido
- Desconectado
Puede esperar hasta que un trabajo especificado o todos los trabajos estén en un estado de terminación. También puede establecer un tiempo de espera máximo para el trabajo mediante el parámetro timeout de o usar el parámetro Force para esperar un trabajo en los estados de Suspended
o Disconnected
.
Cuando se completen los comandos del trabajo, Wait-Job
devuelve un objeto de trabajo y continúa la ejecución.
Puede usar el cmdlet
A partir de Windows PowerShell 3.0, el cmdlet Wait-Job
también espera tipos de trabajo personalizados, como trabajos de flujo de trabajo e instancias de trabajos programados. Para permitir que Wait-Job
esperar trabajos de un tipo determinado, importe el módulo que admite el tipo de trabajo personalizado en la sesión antes de ejecutar el cmdlet Get-Job
, ya sea mediante el cmdlet Import-Module
o mediante o obteniendo un cmdlet en el módulo. Para obtener información sobre un tipo de trabajo personalizado determinado, consulte la documentación de la característica de tipo de trabajo personalizado.
Ejemplos
Ejemplo 1: Esperar a todos los trabajos
Get-Job | Wait-Job
Este comando espera a que finalicen todos los trabajos que se ejecutan en la sesión.
Ejemplo 2: Esperar a que se inicien trabajos en equipos remotos mediante Start-Job
$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$done.Count
3
En este ejemplo se muestra cómo usar el cmdlet Wait-Job
con trabajos iniciados en equipos remotos mediante el cmdlet Start-Job
. Los comandos Start-Job
y Wait-Job
se envían al equipo remoto mediante el cmdlet Invoke-Command
.
En este ejemplo se usa Wait-Job
para determinar si se ha finalizado un comando Get-Date
que se ejecuta como un trabajo en tres equipos diferentes.
El primer comando crea una sesión de Windows PowerShell (PSSession) en cada uno de los tres equipos remotos y los almacena en la variable $s
.
El segundo comando usa Invoke-Command
para ejecutar Start-Job
en cada una de las tres sesiones de $s
.
Todos los trabajos se denominan Date1.
El tercer comando usa Invoke-Command
para ejecutar Wait-Job
. Este comando espera a que finalicen los trabajos de Date1
en cada equipo. Almacena la colección resultante (matriz) de objetos de trabajo en la variable $done
.
El cuarto comando usa la propiedad Count de la matriz de objetos de trabajo de la variable $done
para determinar cuántos de los trabajos han finalizado.
Ejemplo 3: Determinar cuándo finaliza el primer trabajo
$s = New-PSSession -ComputerName (Get-Content -Path .\Machines.txt)
$c = 'Get-EventLog -LogName System | Where-Object {$PSItem.EntryType -eq "error" --and $PSItem.Source -eq "LSASRV"} | Out-File -FilePath Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
En este ejemplo se usa el parámetro Any de Wait-Job
para determinar cuándo se encuentran los primeros trabajos que se ejecutan en la sesión actual en un estado de terminación. También muestra cómo usar el cmdlet Wait-Job
para esperar a que finalicen los trabajos remotos.
El primer comando crea un psSession de Get-Content
para obtener el contenido del archivo. El comando Get-Content
se incluye entre paréntesis para asegurarse de que se ejecuta antes del comando New-PSSession
.
El segundo comando almacena una cadena de comandos Get-EventLog
, entre comillas, en la variable $c
.
El tercer comando usa Invoke-Command
cmdlet para ejecutar Start-Job
en cada una de las sesiones de $s
.
El comando Start-Job
inicia un trabajo que ejecuta el comando Get-EventLog
en la variable $c
.
El comando usa el modificador Using scope para indicar que la variable $c
se definió en el equipo local. El Con modificador de ámbito se introduce en Windows PowerShell 3.0. Para obtener más información sobre el modificador de ámbito Using, vea about_Remote_Variables.
El cuarto comando usa Invoke-Command
para ejecutar un comando Wait-Job
en las sesiones. Usa el parámetro Any para esperar hasta que el primer trabajo de los equipos remotos termine.
Ejemplo 4: Establecer un tiempo de espera para trabajos en equipos remotos
PS> $s = New-PSSession -ComputerName Server01, Server02, Server03
PS> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
PS>
En este ejemplo se muestra cómo usar el parámetro timeout de de Wait-Job
para establecer un tiempo de espera máximo para los trabajos que se ejecutan en equipos remotos.
El primer comando crea un psSession de
El segundo comando usa $jobs
.
El tercer comando usa Invoke-Command
para ejecutar Wait-Job
en cada una de las sesiones de $s
. El comando Wait-Job
determina si todos los comandos se han completado en un plazo de 30 segundos. Usa el parámetro Timeout con un valor de 30 para establecer el tiempo de espera máximo y, a continuación, almacena los resultados del comando en la variable $done
.
En este caso, después de 30 segundos, solo se ha completado el comando en el equipo Server02.
Wait-Job
finaliza la espera, devuelve el objeto que representa el trabajo que se completó y muestra el símbolo del sistema.
La variable $done
contiene un objeto de trabajo que representa el trabajo que se ejecutó en Server02.
Ejemplo 5: Esperar hasta que finalice uno de varios trabajos
Wait-Job -id 1,2,5 -Any
Este comando identifica tres trabajos por sus identificadores y espera hasta que alguno de ellos esté en un estado de terminación. La ejecución continúa cuando finaliza el primer trabajo.
Ejemplo 6: Esperar un período y permitir que el trabajo continúe en segundo plano
Wait-Job -Name "DailyLog" -Timeout 120
Este comando espera 120 segundos (dos minutos) para que finalice el trabajo DailyLog. Si el trabajo no finaliza en los próximos dos minutos, la ejecución continúa y el trabajo continúa ejecutándose en segundo plano.
Ejemplo 7: Esperar un trabajo por nombre
Wait-Job -Name "Job3"
Este comando usa el nombre del trabajo para identificar el trabajo para el que se va a esperar.
Ejemplo 8: Esperar trabajos en el equipo local iniciado con Start-Job
$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1| Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job
En este ejemplo se muestra cómo usar el cmdlet Wait-Job
con trabajos iniciados en el equipo local mediante Start-Job
.
Estos comandos inician un trabajo que obtiene los archivos de script de Windows PowerShell que se agregaron o actualizaron en la semana pasada.
El primer comando usa Start-Job
para iniciar un trabajo en el equipo local. El trabajo ejecuta un comando Get-ChildItem
que obtiene todos los archivos que tienen una extensión de nombre de archivo .ps1 que se agregaron o actualizaron en la semana pasada.
El tercer comando usa Wait-Job
para esperar hasta que el trabajo esté en un estado de terminación. Cuando finalice el trabajo, el comando muestra el objeto de trabajo, que contiene información sobre el trabajo.
Ejemplo 9: Esperar a que se inicien trabajos en equipos remotos mediante Invoke-Command
$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job
En este ejemplo se muestra cómo usar
En este ejemplo se usa Wait-Job
para determinar si un comando de Get-Process
que se ejecuta en las sesiones de tres equipos remotos está en un estado de terminación.
El primer comando crea objetos PSSession en tres equipos y los almacena en la variable $s
.
El segundo comando usa Invoke-Command
para ejecutar Get-Process
en cada una de las tres sesiones de $s
.
El comando usa el parámetro Start-Job
, y el objeto de trabajo se almacena en la variable $j
.
El tercer comando usa un operador de canalización (|
) para enviar el objeto de trabajo en $j
al cmdlet Wait-Job
. En este caso, no es necesario un comando Invoke-Command
, ya que el trabajo reside en el equipo local.
Ejemplo 10: Esperar un trabajo que tenga un identificador
Get-Job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True localhost,Server01.. get-service
4 Job4 Completed True localhost dir | where
Wait-Job -Id 1
Este comando espera al trabajo con un valor de identificador de 1.
Parámetros
-Any
Indica que este cmdlet devuelve el objeto de trabajo y continúa la ejecución cuando finaliza cualquier trabajo. De forma predeterminada, Wait-Job
espera hasta que se completen todos los trabajos especificados antes de que muestre el mensaje.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Filter
Especifica una tabla hash de condiciones. Este cmdlet espera a que los trabajos cumplan todas las condiciones de la tabla hash. Escriba una tabla hash donde las claves son propiedades de trabajo y los valores son valores de propiedad de trabajo.
Este parámetro solo funciona en tipos de trabajo personalizados, como trabajos de flujo de trabajo y trabajos programados. No funciona en trabajos estándar, como los creados mediante el cmdlet Start-Job
. Para obtener información sobre la compatibilidad con este parámetro, consulte el tema de ayuda para el tipo de trabajo.
Este parámetro se introdujo en Windows PowerShell 3.0.
Tipo: | Hashtable |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-Force
Indica que este cmdlet sigue esperando trabajos en estado Suspendido o Desconectado. De forma predeterminada, Wait-Job
devuelve o finaliza la espera, cuando los trabajos se encuentran en uno de los estados siguientes:
- Completado
- Fracasado
- Detenido
- Suspendido
- Desconectado
Este parámetro se introdujo en Windows PowerShell 3.0.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Id
Especifica una matriz de identificadores de trabajos para los que espera este cmdlet.
El identificador es un entero que identifica de forma única el trabajo en la sesión actual. Es más fácil recordar y escribir que el identificador de instancia, pero solo es único en la sesión actual. Puede escribir uno o varios identificadores, separados por comas. Para buscar el identificador de un trabajo, escriba Get-Job
.
Tipo: | Int32[] |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-InstanceId
Especifica una matriz de identificadores de instancia de trabajos para los que espera este cmdlet. El valor predeterminado es todos los trabajos.
Un identificador de instancia es un GUID que identifica de forma única el trabajo en el equipo. Para buscar el identificador de instancia de un trabajo, use Get-Job
.
Tipo: | Guid[] |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-Job
Especifica los trabajos para los que espera este cmdlet. Escriba una variable que contenga los objetos de trabajo o un comando que obtiene los objetos de trabajo. También puede usar un operador de canalización para enviar objetos de trabajo al cmdlet Wait-Job
. De forma predeterminada, Wait-Job
espera todos los trabajos creados en la sesión actual.
Tipo: | Job[] |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-Name
Especifica los nombres descriptivos de los trabajos para los que espera este cmdlet.
Tipo: | String[] |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-State
Especifica un estado de trabajo. Este cmdlet espera solo los trabajos en el estado especificado. Los valores aceptables para este parámetro son:
- NotStarted
- Corriente
- Completado
- Fracasado
- Detenido
- Bloqueado
- Suspendido
- Desconectado
- Suspender
- Parar
Para obtener más información sobre los estados de trabajo, consulte enumeración JobState .
Tipo: | JobState |
Valores aceptados: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-Timeout
Especifica el tiempo de espera máximo para cada trabajo, en segundos. El valor predeterminado, -1, indica que el cmdlet espera hasta que finalice el trabajo. El tiempo se inicia al enviar el comando Wait-Job
, no el comando Start-Job
.
Si se supera este tiempo, la espera finaliza y la ejecución continúa, aunque el trabajo siga ejecutándose. El comando no muestra ningún mensaje de error.
Tipo: | Int32 |
Alias: | TimeoutSec |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
Entradas
System.Management.Automation.RemotingJob
Puede canalizar un objeto de trabajo a este cmdlet.
Salidas
System.Management.Automation.PSRemotingJob
Este cmdlet devuelve objetos de trabajo que representan los trabajos en un estado de terminación. Si finaliza la espera porque se supera el valor del parámetro timeout de , Wait-Job
no devuelve ningún objeto.
Notas
PowerShell incluye los siguientes alias para Wait-Job
:
- Todas las plataformas:
wjb
De forma predeterminada, Wait-Job
devuelve o finaliza la espera, cuando los trabajos se encuentran en uno de los estados siguientes:
- Completado
- Fracasado
- Detenido
- Suspendido
- Desconectado
Para dirigir Wait-Job
para seguir esperando trabajos suspendidos y desconectados, use el parámetro Force.