Get-Job
Obtiene los trabajos en segundo plano de PowerShell que se ejecutan en la sesión actual.
Sintaxis
Get-Job
[-IncludeChildJob]
[-ChildJobState <JobState>]
[-HasMoreData <Boolean>]
[-Before <DateTime>]
[-After <DateTime>]
[-Newest <Int32>]
[[-Id] <Int32[]>]
[<CommonParameters>]
Get-Job
[-IncludeChildJob]
[-ChildJobState <JobState>]
[-HasMoreData <Boolean>]
[-Before <DateTime>]
[-After <DateTime>]
[-Newest <Int32>]
[-State] <JobState>
[<CommonParameters>]
Get-Job
[-IncludeChildJob]
[-ChildJobState <JobState>]
[-HasMoreData <Boolean>]
[-Before <DateTime>]
[-After <DateTime>]
[-Newest <Int32>]
[-Command <String[]>]
[<CommonParameters>]
Get-Job
[-IncludeChildJob]
[-ChildJobState <JobState>]
[-HasMoreData <Boolean>]
[-Before <DateTime>]
[-After <DateTime>]
[-Newest <Int32>]
[-InstanceId] <Guid[]>
[<CommonParameters>]
Get-Job
[-IncludeChildJob]
[-ChildJobState <JobState>]
[-HasMoreData <Boolean>]
[-Before <DateTime>]
[-After <DateTime>]
[-Newest <Int32>]
[-Name] <String[]>
[<CommonParameters>]
Get-Job
[-Filter] <Hashtable>
[<CommonParameters>]
Description
El cmdlet Get-Job obtiene objetos que representan los trabajos en segundo plano que se iniciaron en la sesión actual. Puede usar Get-Job para obtener trabajos que se iniciaron mediante el cmdlet Start-Job o mediante el parámetro AsJob de cualquier cmdlet.
Sin parámetros, un comando Get-Job obtiene todos los trabajos de la sesión actual. Puede usar los parámetros de Get-Job para obtener trabajos concretos.
El objeto de trabajo que get-job devuelve contiene información útil sobre el trabajo, pero no contiene los resultados del trabajo. Para obtener los resultados, use el cmdlet Receive-Job.
Un trabajo en segundo plano de Windows PowerShell es un comando que se ejecuta en segundo plano sin interactuar con la sesión actual. Normalmente, se usa un trabajo en segundo plano para ejecutar un comando complejo que tarda mucho tiempo en finalizar. Para obtener más información sobre los trabajos en segundo plano en Windows PowerShell, consulte about_Jobs.
A partir de Windows PowerShell 3.0, el cmdlet Get-Job también obtiene tipos de trabajo personalizados, como trabajos de flujo de trabajo e instancias de trabajos programados. Para buscar el tipo de trabajo de un trabajo, use la propiedad PSJobTypeName del trabajo.
Para habilitar get-job para obtener un tipo de trabajo personalizado, importe el módulo que admite el tipo de trabajo personalizado en la sesión antes de ejecutar un comando Get-Job, ya sea mediante el cmdlet Import-Module o usando 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: Introducción a todos los trabajos en segundo plano en la sesión actual
PS C:\> Get-Job
Este comando obtiene todos los trabajos en segundo plano iniciados en la sesión actual. No incluye trabajos creados en otras sesiones, incluso si los trabajos se ejecutan en el equipo local.
Ejemplo 2: Detener un trabajo mediante un identificador de instancia
The first command uses the **Get-Job** cmdlet to get a job. It uses the *Name* parameter to identify the job. The command stores the job object that **Get-Job** returns in the $j variable. In this example, there is only one job with the specified name.
PS C:\> $j = Get-Job -Name Job1
The second command gets the **InstanceId** property of the object in the $j variable and stores it in the $ID variable.
PS C:\> $ID = $j.InstanceID
The third command displays the value of the $ID variable.
PS C:\> $ID
Guid
----
03c3232e-1d23-453b-a6f4-ed73c9e29d55
The fourth command uses Stop-Job cmdlet to stop the job. It uses the *InstanceId* parameter to identify the job and $ID variable to represent the instance ID of the job.
PS C:\> Stop-Job -InstanceId $ID
Estos comandos muestran cómo obtener el identificador de instancia de un trabajo y, a continuación, usarlo para detener un trabajo. A diferencia del nombre de un trabajo, que no es único, el identificador de instancia es único.
Ejemplo 3: Obtener trabajos que incluyen un comando específico
PS C:\> Get-Job -Command "*get-process*"
Este comando obtiene los trabajos del sistema que incluyen un comando Get-Process.
El comando usa el parámetro
Ejemplo 4: Obtención de trabajos que incluyen un comando específico mediante la canalización
PS C:\> "*get-process*" | Get-Job
Al igual que el comando del ejemplo anterior, este comando obtiene los trabajos del sistema que incluyen un comando Get-Process. El comando usa un operador de canalización (|) para enviar una cadena, entre comillas, al cmdlet Get-Job. Es el equivalente del comando anterior.
Ejemplo 5: Obtener trabajos que no se han iniciado
PS C:\> Get-Job -State NotStarted
Este comando obtiene solo los trabajos que se han creado pero que aún no se han iniciado. Esto incluye los trabajos que están programados para ejecutarse en el futuro y los que aún no están programados.
Ejemplo 6: Obtener trabajos que no se han asignado un nombre
PS C:\> Get-Job -Name Job*
Este comando obtiene todos los trabajos que tienen nombres de trabajo que comienzan por el trabajo. Dado que el número<de trabajo> es el nombre predeterminado de un trabajo, este comando obtiene todos los trabajos que no tienen un nombre asignado explícitamente.
Ejemplo 7: Usar un objeto de trabajo para representar el trabajo en un comando
The first command uses the **Start-Job** cmdlet to start a background job that runs a **Get-Process** command on the local computer. The command uses the *Name* parameter of **Start-Job** to assign a friendly name to the job.
PS C:\> Start-Job -ScriptBlock {Get-Process} -Name MyJob
The second command uses Get-Job to get the job. It uses the *Name* parameter of **Get-Job** to identify the job. The command saves the resulting job object in the $j variable.
PS C:\> $j = Get-Job -Name MyJob
The third command displays the value of the job object in the $j variable. The value of the **State** property shows that the job is completed. The value of the **HasMoreData** property shows that there are results available from the job that have not yet been retrieved.
PS C:\> $j
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
6 MyJob BackgroundJob Completed True localhost Get-Process
The fourth command uses the **Receive-Job** cmdlet to get the results of the job. It uses the job object in the $j variable to represent the job. You can also use a pipeline operator to send a job object to **Receive-Job**.
PS C:\> Receive-Job -Job $j
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
124 4 13572 12080 59 1140 audiodg
783 16 11428 13636 100 548 CcmExec
96 4 4252 3764 59 3856 ccmsetup
...
En este ejemplo se muestra cómo usar Get-Job para obtener un objeto de trabajo y, a continuación, se muestra cómo usar el objeto de trabajo para representar el trabajo en un comando.
Ejemplo 8: Obtener todos los trabajos, incluidos los trabajos iniciados por un método diferente
The first command uses the **Start-Job** cmdlet to start a job on the local computer.
PS C:\> Start-Job -ScriptBlock {Get-EventLog System}
The second command uses the *AsJob* parameter of the **Invoke-Command** cmdlet to start a job on the S1 computer. Even though the commands in the job run on the remote computer, the job object is created on the local computer, so you use local commands to manage the job.
PS C:\> Invoke-Command -ComputerName S1 -ScriptBlock {Get-EventLog System} -AsJob
The third command uses the **Invoke-Command** cmdlet to run a **Start-Job** command on the S2 computer. By using this method, the job object is created on the remote computer, so you use remote commands to manage the job.
PS C:\> Invoke-Command -ComputerName S2 -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
The fourth command uses **Get-Job** to get the jobs stored on the local computer. The **PSJobTypeName** property of jobs, introduced in Windows PowerShell 3.0, shows that the local job started by using the **Start-Job** cmdlet is a background job and the job started in a remote session by using the **Invoke-Command** cmdlet is a remote job.
PS C:\> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-EventLog System
2 Job2 RemoteJob Running True S1 Get-EventLog System
The fifth command uses **Invoke-Command** to run a **Get-Job** command on the S2 computer.The sample output shows the results of the Get-Job command. On the S2 computer, the job appears to be a local job. The computer name is localhost and the job type is a background job.For more information about how to run background jobs on remote computers, see about_Remote_Jobs.
PS C:\> Invoke-Command -ComputerName S2 -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- ------- -------
4 Job4 BackgroundJob Running True localhost Get-Eventlog System
En este ejemplo se muestra que el cmdlet Get-Job puede obtener todos los trabajos que se iniciaron en la sesión actual, incluso si se iniciaron mediante métodos diferentes.
Ejemplo 9: Investigar un trabajo con errores
The first command uses the **Start-Job** cmdlet to start a job on the local computer. The job object that **Start-Job** returns shows that the job failed. The value of the **State** property is Failed.
PS C:\> Start-Job -ScriptBlock {Get-Process}
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Failed False localhost Get-Process
The second command uses the **Get-Job** cmdlet to get the job. The command uses the dot method to get the value of the **JobStateInfo** property of the object. It uses a pipeline operator to send the object in the **JobStateInfo** property to the Format-List cmdlet, which formats all of the properties of the object (*) in a list.The result of the **Format-List** command shows that the value of the **Reason** property of the job is blank.
PS C:\> (Get-Job).JobStateInfo | Format-List -Property *
State : Failed
Reason :
The third command investigates more. It uses a **Get-Job** command to get the job and then uses a pipeline operator to send the whole job object to the **Format-List** cmdlet, which displays all of the properties of the job in a list.The display of all properties in the job object shows that the job contains a child job named Job2.
PS C:\> Get-Job | Format-List -Property *
HasMoreData : False
StatusMessage :
Location : localhost
Command : get-process
JobStateInfo : Failed
Finished : System.Threading.ManualReset
EventInstanceId : fb792295-1318-4f5d-8ac8-8a89c5261507
Id : 1
Name : Job1
ChildJobs : {Job2}
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
StateChanged :
The fourth command uses **Get-Job** to get the job object that represents the Job2 child job. This is the job in which the command actually ran. It uses the dot method to get the **Reason** property of the **JobStateInfo** property.The result shows that the job failed because of an Access Denied error. In this case, the user forgot to use the Run as administrator option when starting Windows PowerShell.Because background jobs use the remoting features of Windows PowerShell, the computer must be configured for remoting to run a job, even when the job runs on the local computer.For information about requirements for remoting in Windows PowerShell, see about_Remote_Requirements. For troubleshooting tips, see about_Remote_Troubleshooting.
PS C:\> (Get-Job -Name job2).JobStateInfo.Reason
Connecting to remote server using WSManCreateShellEx api failed. The async callback gave the following error message: Access is denied.
Este comando muestra cómo usar el objeto de trabajo que get-job devuelve para investigar por qué se produjo un error en un trabajo. También muestra cómo obtener los trabajos secundarios de cada trabajo.
Ejemplo 10: Obtención de resultados filtrados
The first command uses the **Workflow** keyword to create the WFProcess workflow.
PS C:\> Workflow WFProcess {Get-Process}
The second command uses the *AsJob* parameter of the WFProcess workflow to run the workflow as a background job. It uses the *JobName* parameter of the workflow to specify a name for the job, and the *PSPrivateMetadata* parameter of the workflow to specify a custom ID.
PS C:\> WFProcess -AsJob -JobName WFProcessJob -PSPrivateMetadata @{MyCustomId = 92107}
The third command uses the *Filter* parameter of **Get-Job** to get the job by custom ID that was specified in the *PSPrivateMetadata* parameter.
PS C:\> Get-Job -Filter @{MyCustomId = 92107}
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 WFProcessJob Completed True localhost WFProcess
En este ejemplo se muestra cómo usar el parámetro Filter para obtener un trabajo de flujo de trabajo. El parámetro Filter, introducido en Windows PowerShell 3.0 solo es válido en tipos de trabajo personalizados, como trabajos de flujo de trabajo y trabajos programados.
Ejemplo 11: Obtener información sobre los trabajos secundarios
The first command gets the jobs in the current session. The output includes a background job, a remote job and several instances of a scheduled job. The remote job, Job4, appears to have failed.
PS C:\> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Job2 BackgroundJob Completed True localhost .\Get-Archive.ps1
4 Job4 RemoteJob Failed True Server01, Server02 .\Get-Archive.ps1
7 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
8 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
9 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
10 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
The second command uses the *IncludeChildJob* parameter of **Get-Job**. The output adds the child jobs of all jobs that have child jobs.In this case, the revised output shows that only the Job5 child job of Job4 failed.
PS C:\> Get-Job -IncludeChildJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Job2 BackgroundJob Completed True localhost .\Get-Archive.ps1
3 Job3 Completed True localhost .\Get-Archive.ps1
4 Job4 RemoteJob Failed True Server01, Server02 .\Get-Archive.ps1
5 Job5 Failed False Server01 .\Get-Archive.ps1
6 Job6 Completed True Server02 .\Get-Archive.ps1
7 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
8 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
9 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
10 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
The third command uses the *ChildJobState* parameter with a value of Failed.The output includes all parent jobs and only the child jobs that failed.
PS C:\> Get-Job -Name Job4 -ChildJobState Failed
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Job2 BackgroundJob Completed True localhost .\Get-Archive.ps1
4 Job4 RemoteJob Failed True Server01, Server02 .\Get-Archive.ps1
5 Job5 Failed False Server01 .\Get-Archive.ps1
7 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
8 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
9 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
10 UpdateHelpJob PSScheduledJob Completed True localhost Update-Help
The fifth command uses the **JobStateInfo** property of jobs and its **Reason** property to discover why Job5 failed.
PS C:\> (Get-Job -Name Job5).JobStateInfo.Reason
Connecting to remote server Server01 failed with the following error message:
Access is denied.
For more information, see the about_Remote_Troubleshooting Help topic.
En este ejemplo se muestra el efecto de usar los parámetros
Parámetros
-After
Obtiene los trabajos completados que finalizaron después de la fecha y hora especificadas.
Escriba un
Este parámetro solo funciona en tipos de trabajo personalizados, como trabajos de flujo de trabajo y trabajos programados, que tienen una propiedad EndTime.
No funciona en trabajos en segundo plano estándar, como los creados mediante el cmdlet Start-Job de
Este parámetro se introdujo en Windows PowerShell 3.0.
Tipo: | DateTime |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Before
Obtiene los trabajos completados que finalizaron antes de la fecha y hora especificadas. Escriba un objeto DateTime.
Este parámetro solo funciona en tipos de trabajo personalizados, como trabajos de flujo de trabajo y trabajos programados, que tienen una propiedad EndTime.
No funciona en trabajos en segundo plano estándar, como los creados mediante el cmdlet Start-Job de
Este parámetro se introdujo en Windows PowerShell 3.0.
Tipo: | DateTime |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-ChildJobState
Obtiene solo los trabajos secundarios que tienen el estado especificado. Los valores aceptables para este parámetro son:
- NotStarted
- Corriente
- Completado
- Fracasado
- Detenido
- Bloqueado
- Suspendido
- Desconectado
- Suspender
- Parar
De forma predeterminada, get-job no obtiene trabajos secundarios.
Mediante el parámetro IncludeChildJob, Get-Job obtiene todos los trabajos secundarios.
Si usa el parámetro
Este parámetro se introdujo en Windows PowerShell 3.0.
Tipo: | JobState |
Valores aceptados: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Command
Especifica una matriz de comandos como cadenas. Este cmdlet obtiene los trabajos que incluyen los comandos especificados. El valor predeterminado es todos los trabajos. Puede usar caracteres comodín para especificar un patrón de comando.
Tipo: | String[] |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | True |
-Filter
Especifica una tabla hash de condiciones. Este cmdlet obtiene trabajos que cumplen todas las condiciones. 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 en segundo plano estándar, como los creados mediante el cmdlet Start-Job de
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 |
-HasMoreData
Indica si este cmdlet obtiene solo los trabajos que tienen el valor de propiedad HasMoreData especificado. La propiedad HasMoreData indica si se han recibido todos los resultados del trabajo en la sesión actual. Para obtener trabajos que tengan más resultados, especifique un valor de $True. Para obtener trabajos que no tengan más resultados, especifique un valor de $False.
Para obtener los resultados de un trabajo, use el cmdlet Receive-Job.
Cuando se usa el cmdlet receive-Job de Get-Help Receive-Job
.
La propiedad HasMoreData es específica de la sesión actual. Si los resultados de un tipo de trabajo personalizado se guardan fuera de la sesión, como el tipo de trabajo programado, que guarda los resultados del trabajo en el disco, puede usar el cmdlet Receive-Job en una sesión diferente para obtener los resultados del trabajo de nuevo, incluso si el valor de HasMoreData es $False. Para obtener más información, consulte los temas de ayuda para el tipo de trabajo personalizado.
Este parámetro se introdujo en Windows PowerShell 3.0.
Tipo: | Boolean |
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 que obtiene 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
sin parámetros.
Tipo: | Int32[] |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-IncludeChildJob
Indica que este cmdlet devuelve trabajos secundarios, además de los trabajos primarios.
Este parámetro es especialmente útil para investigar trabajos de flujo de trabajo, para los que Get-Job devuelve un trabajo primario de contenedor y errores de trabajo, porque el motivo del error se guarda en una propiedad del trabajo secundario.
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 |
-InstanceId
Especifica una matriz de identificadores de instancia de trabajos que obtiene 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 |
-Name
Especifica una matriz de nombres descriptivos de instancia de trabajos que obtiene este cmdlet. Escriba un nombre de trabajo o use caracteres comodín para especificar un patrón de nombre de trabajo. De forma predeterminada, get-job obtiene todos los trabajos de la sesión actual.
Tipo: | String[] |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | True |
-Newest
Especifica una serie de trabajos que se van a obtener. Este cmdlet obtiene los trabajos que finalizaron más recientemente.
El parámetro Newest no ordena ni devuelve los trabajos más recientes en orden de finalización. Para ordenar la salida, use el cmdlet Sort-Object.
Este parámetro se introdujo en Windows PowerShell 3.0.
Tipo: | Int32 |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-State
Especifica un estado de trabajo. Este cmdlet solo obtiene trabajos en el estado especificado. Los valores aceptables para este parámetro son:
- NotStarted
- Corriente
- Completado
- Fracasado
- Detenido
- Bloqueado
- Suspendido
- Desconectado
- Suspender
- Parar
De forma predeterminada, Get-Job obtiene todos los trabajos de la sesión actual.
Para obtener más información sobre los estados de trabajo, consulte enumeración JobState en MSDN Library.
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 |
Entradas
None
No se puede canalizar la entrada a este cmdlet.
Salidas
System.Management.Automation.RemotingJob
Este cmdlet devuelve objetos que representan los trabajos de la sesión.
Notas
La propiedad PSJobTypeName de
indica el tipo de trabajo del trabajo. El valor de la propiedad viene determinado por el autor del tipo de trabajo. En la lista siguiente se muestran los tipos de trabajo comunes. backgroundJob. Trabajo local iniciado mediante Start-Job.
RemoteJob. Trabajo iniciado en un
PSSession mediante el parámetro de AsJob del cmdlet Invoke-Command. PSWorkflowJob. Trabajo iniciado mediante el AsJob parámetro común de flujos de trabajo.