Compartir a través de


Receive-Job

Obtiene los resultados de los trabajos en segundo plano de Windows PowerShell en la sesión actual.

Sintaxis

Receive-Job [-Job] <Job[]> [[-ComputerName] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [[-InstanceId] <Guid[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Job] <Job[]> [[-Location] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [[-Name] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Job] <Job[]> [[-Session] <PSSession[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Id] <Int32[]> [-Keep] [-NoRecurse] [<CommonParameters>]

Descripción

El cmdlet Receive-Job obtiene los resultados de los trabajos en segundo plano de Windows PowerShell. Receive-Job se utiliza para obtener los resultados de los trabajos iniciados mediante el cmdlet Start-Job o el parámetro AsJob de cualquier cmdlet. Puede obtener los resultados de todos los trabajos o identificar los trabajos por su nombre, identificador, identificador de instancia, nombre de equipo, ubicación o sesión, o enviando un objeto de trabajo.

Cuando se inicia un trabajo en segundo plano de Windows PowerShell, el trabajo se inicia, pero los resultados no aparecen inmediatamente. En su lugar, el comando devuelve un objeto que representa el trabajo en segundo plano. El objeto de trabajo contiene información útil sobre el trabajo, pero no contiene los resultados. Este método permite continuar trabajando en la sesión mientras se ejecuta el trabajo. Para obtener más información sobre los trabajos en segundo plano en Windows PowerShell, vea about_Jobs.

Para obtener los resultados del comando, se utiliza el cmdlet Receive-Job. Receive-Job obtiene los resultados generados en el momento de enviarse el comando Receive-Job. Si los resultados no se han completado todavía, se pueden ejecutar comandos Receive-Job adicionales para obtener los resultados restantes.

De forma predeterminada, los resultados del trabajo se eliminan del sistema al recibirlos, pero se puede utilizar el parámetro Keep para guardar los resultados y poder recibirlos de nuevo. Para eliminar los resultados del trabajo, hay que recibirlos de nuevo (sin el parámetro Keep), cerrar la sesión o utilizar el cmdlet Remove-Job para eliminar el trabajo de la sesión.

Parámetros

-ComputerName <string[]>

Obtiene los resultados de trabajos que se ejecutaron en los equipos especificados. Escriba los nombres de equipo. El valor predeterminado son todos los trabajos de la sesión actual.

Este parámetro selecciona entre los resultados de trabajos que se almacenan en el equipo local. No obtiene datos de equipos remotos. A fin de obtener resultados de trabajos que se almacenan en equipos remotos, se utiliza el cmdlet Invoke-Command para ejecutar un comando Receive-Job de forma remota.

¿Requerido?

false

¿Posición?

2

Valor predeterminado

¿Aceptar canalización?

true (ByPropertyName)

¿Aceptar caracteres comodín?

false

-Id <Int32[]>

Obtiene los resultados de trabajos con los identificadores especificados. El valor predeterminado son todos los trabajos de la sesión actual.

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 el identificador de instancia, 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[]>

Obtiene los resultados de trabajos con los identificadores de instancia especificados. El valor predeterminado son todos los trabajos de la sesión actual.

Un identificador de instancia es un GUID que identifica de forma única el trabajo en el equipo. Para obtener el identificador de instancia de un trabajo, se utiliza el cmdlet Get-Job.

¿Requerido?

false

¿Posición?

1

Valor predeterminado

¿Aceptar canalización?

true (ByPropertyName)

¿Aceptar caracteres comodín?

false

-Job <Job[]>

Especifica el trabajo para el que se recuperan los resultados. Este parámetro es obligatorio en un comando Receive-Job. Escriba una variable que contenga el trabajo o un comando que lo obtenga. También se puede canalizar un objeto de trabajo a Receive-Job.

¿Requerido?

true

¿Posición?

1

Valor predeterminado

¿Aceptar canalización?

true (ByValue, ByPropertyName)

¿Aceptar caracteres comodín?

false

-Keep

Guarda los resultados del trabajo en el sistema, incluso después de haberlos recibido. De forma predeterminada, los resultados del trabajo se eliminan una vez recuperados.

Para eliminar los resultados, se usa Receive-Job para volver a recibirlos sin el parámetro Keep, se cierra la sesión o se utiliza el cmdlet Remove-Job para eliminar el trabajo de la sesión.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-Location <string[]>

Obtiene solamente los resultados de trabajos con la ubicación especificada. El valor predeterminado son todos los trabajos de la sesión actual.

¿Requerido?

false

¿Posición?

2

Valor predeterminado

¿Aceptar canalización?

true (ByPropertyName)

¿Aceptar caracteres comodín?

false

-Name <string[]>

Obtiene los resultados de trabajos con el nombre simple especificado. El valor predeterminado son todos los trabajos de la sesión actual.

¿Requerido?

false

¿Posición?

1

Valor predeterminado

¿Aceptar canalización?

true (ByPropertyName)

¿Aceptar caracteres comodín?

false

-NoRecurse

Obtiene solamente resultados del trabajo especificado. De forma predeterminada, Receive-Job también obtiene los resultados de todos los trabajos secundarios del trabajo especificado.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-Session <PSSession[]>

Obtiene los resultados de trabajos que se ejecutaron en la sesión de Windows PowerShell (PSSession) especificada. Escriba una variable que contenga la PSSession o un comando que la obtenga, como un comando Get-PSSession. El valor predeterminado son todos los trabajos de la sesión actual.

¿Requerido?

false

¿Posición?

2

Valor predeterminado

¿Aceptar canalización?

true (ByPropertyName)

¿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.Job

Se pueden canalizar objetos de trabajo a Receive-Job.

Salidas

PSObject

Receive-Job devuelve los resultados de los comandos del trabajo.

Ejemplo 1

C:\PS>$job = start-job -scriptblock {get-process}

C:\PS> receive-job -job $job

Descripción
-----------
Estos comandos utilizan el parámetro Job para obtener los resultados de un trabajo concreto. El primer comando utiliza el cmdlet Start-Job para iniciar un trabajo que ejecuta un comando "Get-Process". El comando utiliza el operador de asignación (=) para guardar el objeto de trabajo resultante en la variable $job.

El segundo comando utiliza el cmdlet Receive-Job para obtener los resultados del trabajo. Usa el parámetro Job para especificar el trabajo.





Ejemplo 2

C:\PS>$job = start-job -scriptblock {get-process}

C:\PS> $job | receive-job

Descripción
-----------
Este ejemplo es como el Ejemplo 2, con la salvedad de que el comando utiliza un operador de canalización (|) para enviar el objeto de trabajo a Receive-Job. Como consecuencia, el comando no necesita un parámetro Job para especificar el trabajo.





Ejemplo 3

C:\PS>$j = invoke-command -computername Server01, Server02, Server03 -scriptblock {get-service} -AsJob

C:\PS> $j.childjobs

Id   Name     State      HasMoreData   Location       Command
--   ----     -----      -----------   --------       -------
2    Job2     Completed  True          Server01       get-service
3    Job3     Completed  True          Server02       get-service
4    Job4     Completed  True          Server03       get-service

C:\PS> receive-job -name Job3  -keep

Status  Name        DisplayName                        PSComputerName
------  ----------- -----------                        --------------
Running AeLookupSvc Application Experience             Server02
Stopped ALG         Application Layer Gateway Service  Server02
Running Appinfo     Application Information            Server02
Running AppMgmt     Application Management             Server02

Descripción
-----------
Estos comandos utilizan el parámetro Name de Receive-Job para obtener los resultados de uno de los trabajos en segundo plano que se ejecutan en equipos remotos. 

El primer comando utiliza el cmdlet Invoke-Command para iniciar un trabajo en segundo plano que ejecuta un comando Get-Service en tres equipos remotos. El comando utiliza el parámetro AsJob para ejecutar el comando como un trabajo en segundo plano. El comando guarda el objeto de trabajo resultante en la variable $j.

Cuando se utiliza el parámetro AsJob de Invoke-Command para iniciar un trabajo, el objeto de trabajo se crea en el equipo local, aunque el trabajo se ejecute en los equipos remotos. Como consecuencia, se utilizan comandos locales para administrar el trabajo.

Además, cuando se utiliza AsJob, Windows PowerShell devuelve un objeto de trabajo que contiene un trabajo secundario para cada trabajo iniciado. En este caso, el objeto de trabajo contiene tres trabajos secundarios, uno para cada trabajo en cada equipo remoto.

El segundo comando usa el método de puntos para mostrar el valor de la propiedad ChildJobs del objeto de trabajo en $j. La presentación muestra que el comando creó tres trabajos secundarios, uno para el trabajo en cada equipo remoto.
 
El tercer comando usa el cmdlet Receive-Job para obtener los resultados del trabajo secundario Job3 que se ejecutó en el equipo Server02. Utiliza el parámetro Name para especificar el nombre del trabajo secundario y el parámetro Keep para guardar los resultados del trabajo después de haberse recibido.





Ejemplo 4

C:\PS>$s = new-pssession -computername Server01, Server02, Server03

C:\PS> $j = invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog -logname system}}

C:\PS> $j

Id   Name     State      HasMoreData   Location   Command
--   ----     -----      -----------   --------   -------
1    Job1     Completed  True          Localhost  get-eventlog system
2    Job2     Completed  True          Localhost  get-eventlog system
3    Job3     Completed  True          Localhost  get-eventlog system

C:\PS> $results = invoke-command -session $s -scriptblock {param($j) receive-job -job $j} -ArgumentList $j

Descripción
-----------
En este ejemplo se muestra la forma de obtener los resultados de los trabajos en segundo plano ejecutados en tres equipos remotos.

El primer comando utiliza el cmdlet New-PSSession para crear tres PSSessions, una en cada uno de los servidores especificados en el comando. 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 de la variable $s. El trabajo ejecuta un comando Get-Eventlog que obtiene los eventos en el registro del sistema. El comando guarda los resultados en la variable $j.

Dado que el comando utilizó Invoke-Command para ejecutar el comando Start-Job, el comando inició realmente tres trabajos independientes en cada uno de los tres equipos. Como consecuencia, el comando devolvió tres objetos de trabajo que representan tres trabajos ejecutados localmente en tres equipos diferentes.

El tercer comando muestra los tres objetos de trabajo en $j. 

El cuarto comando utiliza Invoke-Command para ejecutar un comando Receive-Job en cada una de las PSSessions contenidas en $s y guarda los resultados en la variable $results.

Dado que $j es una variable local, el bloque de script utiliza la palabra clave "param" para declarar las variables en el comando y el parámetro ArgumentList para proporcionar el valor de $j.





Vea también

Conceptos

about_Jobs
about_Job_Details
about_Remote_Jobs
Start-Job
Get-Job
Wait-Job
Stop-Job
Remove-Job
Invoke-Command