Trabajos en segundo plano

Los cmdlets pueden realizar su acción internamente o como un Windows PowerShell en segundo plano. Cuando un cmdlet se ejecuta como un trabajo en segundo plano, el trabajo se realiza de forma asincrónica en su propio subproceso independiente del subproceso de canalización que usa el cmdlet. Desde la perspectiva del usuario, cuando un cmdlet se ejecuta como un trabajo en segundo plano, el símbolo del sistema se devuelve inmediatamente incluso si el trabajo tarda mucho tiempo en completarse y el usuario puede continuar sin interrupción mientras se ejecuta el trabajo.

Trabajos en segundo plano, trabajos secundarios y el repositorio de trabajos

El objeto de trabajo devuelto por los cmdlets que admiten trabajos en segundo plano define el trabajo. (El cmdlet Start-Job también devuelve un objeto de trabajo). El nombre del trabajo, un identificador que se usa para especificar el trabajo, la información de estado y los trabajos secundarios se incluyen en esta definición. El trabajo no realiza ninguna de las tareas. Cada trabajo en segundo plano tiene al menos un trabajo secundario porque el trabajo secundario realiza el trabajo real. Al ejecutar un cmdlet para que el trabajo se realice como un trabajo en segundo plano, el cmdlet debe agregar el trabajo y los trabajos secundarios a un repositorio común, denominado repositorio de trabajos.

Para obtener más información sobre cómo se controlan los trabajos en segundo plano en la línea de comandos, vea lo siguiente:

Escritura de un cmdlet que se ejecuta como un trabajo en segundo plano

Para escribir un cmdlet que se pueda ejecutar como un trabajo en segundo plano, debe completar las siguientes tareas:

  • Defina un asJob parámetro switch para que el usuario pueda decidir si desea ejecutar el cmdlet como un trabajo en segundo plano.

  • Cree un objeto que se derive de la clase System.Management.Automation.Job. Este objeto puede ser un objeto de trabajo personalizado o un objeto de trabajo proporcionado por Windows PowerShell, como un objeto System.Management.Automation.Pseventjob.

  • En un método de procesamiento de registros, agregue una if instrucción que detecte si el cmdlet debe ejecutarse como un trabajo en segundo plano.

  • Para los objetos de trabajo personalizados, implemente la clase de trabajo .

  • Devuelve los objetos adecuados, dependiendo de si el cmdlet se ejecuta como un trabajo en segundo plano.

Para obtener un ejemplo de código, vea Cómo admitir trabajos.

Las siguientes API se proporcionan mediante Windows PowerShell para administrar trabajos en segundo plano.

System.Management.Automation.Job Deriva objetos de trabajo personalizados. Esta es una clase abstracta.

System.Management.Automation.Jobrepository administra y proporciona información sobre los trabajos en segundo plano activos actuales.

System.Management.Automation.Jobstate Define el estado del trabajo en segundo plano. Entre los estados se incluyen Iniciado, En ejecución y Detenido.

System.Management.Automation.Jobstateinfo Proporciona información sobre el estado de un trabajo en segundo plano y, si el último cambio de estado se produjo por un error, el motivo por el que el trabajo entró en su estado actual.

System.Management.Automation.Jobstateeventargs Proporciona los argumentos para un evento que se genera cuando un trabajo en segundo plano cambia de estado.

Windows PowerShell Cmdlets de trabajo

Los siguientes cmdlets los proporciona Windows PowerShell para administrar trabajos en segundo plano.

Get-Job

Obtiene los trabajos en segundo plano de Windows PowerShell que se están ejecutando en la sesión actual.

Receive-Job

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

Remove-Job

Elimina un trabajo en segundo plano de Windows PowerShell.

Start-Job

Inicia un trabajo en segundo plano de Windows PowerShell.

Stop-Job

Detiene un trabajo en segundo plano de Windows PowerShell.

Wait-Job

Suprime el símbolo del sistema hasta que finalicen uno o todos los trabajos en segundo plano de Windows PowerShell que se ejecutan en la sesión.

Vea también

Escribir un cmdlet de Windows PowerShell