Suprime el símbolo del sistema hasta que uno o todos los trabajos en segundo plano de Windows PowerShell que se ejecutan en la sesión se completen.
Sintaxis
Wait-Job [[-InstanceId] <Guid[]>] [-Any] [-Timeout <int>] [<CommonParameters>] Wait-Job [-Job] <Job[]> [-Any] [-Timeout <int>] [<CommonParameters>] Wait-Job [[-Name] <string[]>] [-Any] [-Timeout <int>] [<CommonParameters>] Wait-Job [-Id] <Int32[]> [-Any] [-Timeout <int>] [<CommonParameters>] Wait-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [-Any] [-Timeout <int>] [<CommonParameters>]
Descripción
El cmdlet Wait-Job espera a que los trabajos en segundo plano de Windows PowerShell se completen antes de mostrar el símbolo del sistema. Se puede esperar a que se complete cualquier trabajo en segundo plano o a que se completen todos los trabajos en segundo plano; también se puede establecer un tiempo de espera máximo para el trabajo.
Wait-Job se puede utilizar para obtener los trabajos en segundo plano iniciados mediante Start-Job o mediante el parámetro AsJob de Invoke-Command.
Una vez completados los comandos del trabajo, Wait-Job muestra el símbolo del sistema y devuelve un objeto de trabajo para que sea posible canalizarlo a otro comando.
Parámetros
-Any
Muestra el símbolo del sistema (y devuelve el objeto de trabajo) cuando se completa cualquier trabajo. De forma predeterminada, Wait-Job espera a que se completen todos los trabajos especificados antes de que se muestre el símbolo del sistema.
¿Requerido? |
false |
¿Posición? |
named |
Valor predeterminado |
|
¿Aceptar canalización? |
false |
¿Aceptar caracteres comodín? |
false |
-Id <Int32[]>
Espera a los trabajos con los identificadores especificados.
El identificador es un entero que identifica de forma única el trabajo en la sesión actual. Es más fácil de recordar y escribir que InstanceId, pero es único solamente en la sesión actual. Puede escribir uno o varios identificadores (separados por comas). Para buscar el identificador de un trabajo, se escribe "Get-Job" sin parámetros.
¿Requerido? |
true |
¿Posición? |
1 |
Valor predeterminado |
|
¿Aceptar canalización? |
true (ByPropertyName) |
¿Aceptar caracteres comodín? |
false |
-InstanceId <Guid[]>
Espera a los trabajos con los identificadores de instancia especificados. El valor predeterminado son 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, se utiliza Get-Job.
¿Requerido? |
false |
¿Posición? |
1 |
Valor predeterminado |
|
¿Aceptar canalización? |
true (ByPropertyName) |
¿Aceptar caracteres comodín? |
false |
-Job <Job[]>
Espera a los trabajos especificados. Escriba una variable que contenga los objetos de trabajo o un comando que obtenga dichos objetos. También se puede utilizar un operador de canalización para enviar objetos de trabajo al cmdlet Wait-Job. De forma predeterminada, Wait-Job espera a todos los trabajos creados en la sesión actual.
¿Requerido? |
true |
¿Posición? |
1 |
Valor predeterminado |
|
¿Aceptar canalización? |
true (ByValue, ByPropertyName) |
¿Aceptar caracteres comodín? |
false |
-Name <string[]>
Espera a los trabajos con el nombre simple especificado.
¿Requerido? |
false |
¿Posición? |
1 |
Valor predeterminado |
|
¿Aceptar canalización? |
true (ByPropertyName) |
¿Aceptar caracteres comodín? |
false |
-State <JobState>
Espera a los trabajos con el estado especificado. Los valores válidos son NotStarted, Running, Completed, Stopped, Failed y Blocked.
¿Requerido? |
false |
¿Posición? |
named |
Valor predeterminado |
|
¿Aceptar canalización? |
true (ByPropertyName) |
¿Aceptar caracteres comodín? |
false |
-Timeout <int>
Determina el tiempo de espera máximo para cada trabajo en segundo plano, en segundos. Con el valor predeterminado -1, se espera a que se complete el trabajo, independientemente del tiempo que tarde en ejecutarse. El tiempo empieza a contarse cuando se envía el comando Wait-Job y no el comando Start-Job.
Si se supera este período de tiempo, la espera finaliza y se vuelve al símbolo del sistema, aunque el trabajo se siga ejecutando. No se muestra ningún mensaje de error.
¿Requerido? |
false |
¿Posición? |
named |
Valor predeterminado |
|
¿Aceptar canalización? |
false |
¿Aceptar caracteres comodín? |
false |
<CommonParameters>
Este cmdlet admite los parámetros comunes: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer y -OutVariable. Para obtener más información, vea about_Commonparameters.
Entradas y salidas
El tipo de entrada es el tipo de los objetos que se pueden canalizar al cmdlet. El tipo devuelto es el tipo de los objetos que el cmdlet devuelve.
Entradas |
System.Management.Automation.RemotingJob Se puede canalizar un objeto de trabajo a Wait-Job. |
Salidas |
System.Management.Automation.RemotingJob Wait-Job devuelve los objetos de trabajo que representan los trabajos completados. Si la espera finaliza porque se supera el valor del parámetro Timeout, Wait-Job no devuelve objetos. |
Ejemplo 1
C:\PS>get-job | wait-job Descripción ----------- Este comando espera a que todos los trabajos en segundo plano que se ejecutan en la sesión se completen.
Ejemplo 2
C:\PS>$s = new-pssession server01, server02, server03 C:\PS> invoke-command -session $s -scriptblock {start-job -name Date1 -scriptblock {get-date}} C:\PS> $done = invoke-command -session $s -command {wait-job -name Date1} C:\PS> $done.count 3 Descripción ----------- En este ejemplo se muestra la forma de utilizar 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 utilizando el cmdlet Invoke-Command. En este ejemplo se utiliza Wait-Job para determinar si se ha completado un comando Get-Date que se ejecuta como trabajo en segundo plano en tres equipos diferentes. El primer comando crea una sesión de Windows PowerShell (PSSession) en cada uno de los tres equipos remotos y las almacena en la variable $s. El segundo comando usa el cmdlet Invoke-Command para ejecutar un comando Start-Job en cada una de las tres sesiones en $s. Todos los trabajos se denominan Date1. El tercer comando utiliza el cmdlet Invoke-Command para ejecutar un comando Wait-Job. Este comando espera a que los trabajos Date1 en cada equipo se completen. Almacena la colección (matriz) de objetos de trabajo resultante en la variable $done. El cuarto comando utiliza la propiedad Count de la matriz de objetos de trabajo en la variable $done para determinar cuántos trabajos se completan.
Ejemplo 3
C:\PS>$s = new-pssession (get-content machines.txt) C:\PS> $c = 'get-eventlog -log system | where {$_.EntryType -eq "error" -and $_.Source -eq "LSASRV"} | out-file errors.txt' C:\PS> invoke-command -session $s -scriptblock {param($c)start-job -scriptblock {$c}} -ArgumentList $c C:\PS> invoke-command -session $s -scriptblock {wait-job -any} Descripción ----------- En este ejemplo se utiliza el parámetro Any de Wait-Job para determinar cuándo se completa el primero de los trabajos en segundo plano que se ejecutan en la sesión actual. También muestra la forma de utilizar el cmdlet Wait-Job para esperar a que se completen los trabajos remotos. El primer comando crea una PSSession en cada uno de los equipos enumerados en el archivo Machines.txt y almacena las PSSessions en la variable $s. El comando utiliza el cmdlet Get-Content para obtener el contenido del archivo. El comando Get-Content se coloca entre paréntesis para garantizar que se ejecuta antes que el comando New-PSSession. El segundo comando almacena una cadena de comando Get-EventLog (entre comillas) en la variable $c. El tercer comando usa el cmdlet Invoke-Command para ejecutar un comando Start-Job en cada una de las sesiones en $s. El comando Start-Job inicia un trabajo en segundo plano que ejecuta el comando en $c. Dado que la variable $c está en el equipo local, el comando utiliza la palabra clave "param" para declarar las variables locales en el comando y el parámetro ArgumentList para proporcionar los valores para esas variables. El cuarto comando utiliza el cmdlet Invoke-Command para ejecutar un comando Wait-Job en las sesiones. Utiliza el cmdlet Wait-Job para esperar hasta que se complete el primero de los trabajos de los equipos remotos.
Ejemplo 4
C:\PS>$s = new-pssession Server01, Server02, Server03 C:\PS> $jobs = invoke-command -session $s -scriptblock {start-job -script {get-date}} C:\PS> $done = invoke-command -session $s -scriptblock {wait-job -timeout 30} Descripción ----------- En este ejemplo se muestra la forma de utilizar el parámetro Timeout de Wait-Job a fin de establecer un tiempo de espera máximo para los trabajos que se ejecutan en equipos remotos. El primer comando crea una PSSession en cada uno de los tres equipos remotos (Server01, Server02 y Server03) y guarda las PSSessions en la variable $s. El segundo comando usa el cmdlet Invoke-Command para ejecutar un comando Start-Job en cada una de las PSSessions contenidas en $s. Guarda los objetos de trabajo resultantes en la variable $jobs. El tercer comando usa el cmdlet Invoke-Command para ejecutar un comando Wait-Job en cada una de las PSSessions en $s. El comando Wait-Job determina si todos los comandos se han completado en 30 segundos. Utiliza el parámetro Timeout con un valor de 30 (segundos) para establecer el tiempo de espera máximo y guarda los resultados del comando en la variable $done. En este caso, después de transcurridos 30 segundos, solo se ha completado el comando en el equipo Server02. Wait-Job finaliza la espera, muestra el símbolo del sistema y devuelve el objeto que representa el trabajo que se ha completado. La variable $done contiene un objeto de trabajo que representa el trabajo que se ejecutó en Server02.
Ejemplo 5
C:\PS>wait-job -id 1,2,5 -any Descripción ----------- Este comando identifica tres trabajos por sus identificadores y espera a que cualquiera de ellos se complete. El símbolo del sistema se devuelve cuando el primer trabajo se completa.
Ejemplo 6
C:\PS>wait-job -name DailyLog -timeout 120 Descripción ----------- Este comando espera 120 segundos (dos minutos) a que el trabajo DailyLog se complete. Si el trabajo no se completa en los dos minutos siguientes, el símbolo del sistema se devuelve en cualquier caso y el trabajo continúa ejecutándose en segundo plano.
Ejemplo 7
C:\PS>wait-job -name Job3 Descripción ----------- Este comando Wait-Job utiliza el nombre de trabajo para identificar el trabajo al que se espera.
Ejemplo 8
C:\PS>C:\PS> $j = start-job -script {get-childitem *.ps1| where {$_lastwritetime -gt ((get-date) - (new-timespan -days 7))}} C:\PS> $j | wait-job Descripción ----------- En este ejemplo se muestra la forma de utilizar el cmdlet Wait-Job con trabajos iniciados en el equipo local mediante el cmdlet Start-Job. Estos comandos inician un trabajo que obtiene los archivos de script de Windows PowerShell que se agregaron o actualizaron la última semana. El primer comando utiliza el cmdlet Start-Job para iniciar un trabajo en segundo plano en el equipo local. El trabajo ejecuta un comando Get-ChildItem que obtiene todos los archivos con la extensión de nombre de archivo ".ps1" que se agregaron o actualizaron la última semana. El tercer comando usa el cmdlet Wait-Job para esperar a que el trabajo se complete. Cuando el trabajo se completa, el comando muestra el objeto de trabajo, que contiene información sobre el trabajo.
Ejemplo 9
C:\PS>$s = new-pssession Server01, Server02, Server03 C:\PS> $j = invoke-command -session $s -scriptblock {get-process} -asjob C:\PS> $j | wait-job Descripción ----------- En este ejemplo se muestra la forma de utilizar el cmdlet Wait-Job con los trabajos iniciados en equipos remotos mediante el parámetro AsJob del cmdlet Invoke-Command. Cuando se usa AsJob, el trabajo se crea en el equipo local y los resultados se devuelven automáticamente al equipo local, aunque el trabajo se ejecute en los equipos remotos. En este ejemplo se utiliza Wait-Job para determinar si se ha completado un comando Get-Process que se ejecuta en las sesiones de los tres equipos remotos. El primer comando crea PSSessions en tres equipos y las almacena en la variable $s. El segundo comando usa el cmdlet Invoke-Command para ejecutar un comando Get-Process en cada una de las tres PSSessions en $s. El comando utiliza el parámetro AsJob para ejecutar el comando de forma asincrónica como un trabajo en segundo plano. El comando devuelve un objeto de trabajo, al igual que los trabajos iniciados utilizando 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. Observe que no se requiere un comando Invoke-Command en este caso, porque el trabajo reside en el equipo local.
Ejemplo 10
C:\PS>get-job Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 1 Job1 Completed True localhost,server01.. get-service 4 Job4 Completed True localhost dir | where C:\PS> wait-job -id 1 Descripción ----------- Este comando espera al trabajo cuyo valor de identificador es 1.
Vea también