Compartilhar via


Trabalhos em segundo plano

Os cmdlets podem executar sua ação internamente ou como um trabalho em segundo plano do Windows PowerShell. Quando um cmdlet é executado como um trabalho em segundo plano, o trabalho é feito de forma assíncrona em seu próprio thread separado do thread de pipeline que o cmdlet está usando. Do ponto de vista do usuário, quando um cmdlet é executado como um trabalho em segundo plano, o prompt de comando retorna imediatamente mesmo que o trabalho tenha um período estendido de tempo para ser concluído e o usuário possa continuar sem interrupções enquanto o trabalho é executado.

Trabalhos em segundo plano, trabalhos filho e o repositório de trabalhos

O objeto de trabalho retornado pelos cmdlets que dão suporte a trabalhos em segundo plano define o trabalho. (O cmdlet do start-job também retorna um objeto de trabalho.) O nome do trabalho, um identificador usado para especificar o trabalho, as informações de estado e os trabalhos filho estão incluídos nessa definição. O trabalho não executa nenhum trabalho. Cada trabalho em segundo plano tem pelo menos um trabalho filho porque o trabalho filho executa o trabalho real. Quando você executa um cmdlet para que o trabalho seja executado como um trabalho em segundo plano, o cmdlet deve adicionar o trabalho e os trabalhos filho a um repositório comum, conhecido como repositório de trabalhos.

Para obter mais informações sobre como os trabalhos em segundo plano são tratados na linha de comando, consulte o seguinte:

Escrevendo um cmdlet que é executado como um trabalho em segundo plano

Para escrever um cmdlet que pode ser executado como um trabalho em segundo plano, você deve concluir as seguintes tarefas:

  • Defina um parâmetro de opção asJob para que o usuário possa decidir se deve executar o cmdlet como um trabalho em segundo plano.

  • Crie um objeto que deriva da classe System.Management.Automation.Job. Esse objeto pode ser um objeto de trabalho personalizado ou um objeto de trabalho fornecido pelo Windows PowerShell, como um objeto System.Management.Automation.PSEventJob.

  • Em um método de processamento de registro, adicione uma instrução if que detecte se o cmdlet deve ser executado como um trabalho em segundo plano.

  • Para objetos de trabalho personalizados, implemente a classe de trabalho.

  • Retorne os objetos apropriados, dependendo se o cmdlet é executado como um trabalho em segundo plano.

Para obter um exemplo de código, consulte Como dar suporte a trabalhos.

As APIs a seguir são fornecidas pelo Windows PowerShell para gerenciar trabalhos em segundo plano.

System.Management.Automation.Job Deriva objetos de trabalho personalizados. Esta é uma classe abstrata.

System.Management.Automation.JobRepository Manages e fornece informações sobre os trabalhos em segundo plano ativos atuais.

System.Management.Automation.JobState Define o estado do trabalho em segundo plano. Os estados incluem Iniciado, Em Execução e Parado.

System.Management.Automation.JobStateInfo Fornece informações sobre o estado de um trabalho em segundo plano e, se a última alteração de estado foi causada por um erro, o motivo pelo qual o trabalho entrou em seu estado atual.

System.Management.Automation.JobStateEventArgs Fornece os argumentos para um evento gerado quando um trabalho em segundo plano muda de estado.

Cmdlets de trabalho do Windows PowerShell

Os cmdlets a seguir são fornecidos pelo Windows PowerShell para gerenciar trabalhos em segundo plano.

Get-Job

Obtém trabalhos em segundo plano do Windows PowerShell que estão em execução na sessão atual.

Receber trabalho

Obtém os resultados dos trabalhos em segundo plano do Windows PowerShell na sessão atual.

Remove-Job

Exclui um trabalho em segundo plano do Windows PowerShell.

Start-Job

Inicia um trabalho em segundo plano do Windows PowerShell.

Stop-Job

Interrompe um trabalho em segundo plano do Windows PowerShell.

Wait-Job

Suprime o prompt de comando até que um ou todos os trabalhos em segundo plano do Windows PowerShell em execução na sessão sejam concluídos.

Consulte Também

gravando um cmdlet do Windows PowerShell