Partilhar via


Background Jobs (Tarefas em Segundo Plano)

Os cmdlets podem executar a sua ação internamente ou como um Windows PowerShelljob em segundo plano. 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 demore muito tempo para ser concluído, e o usuário pode continuar sem interrupção enquanto o trabalho é executado.

Trabalhos em segundo plano, trabalhos filhos 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 Start-Job também devolve um objeto de trabalho.) O nome do trabalho, um identificador usado para especificar o trabalho, a informação do estado e os cargos filhos estão incluídos nesta definição. O trabalho não executa nenhum dos trabalhos. 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 tarefas .

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 possa ser executado como um trabalho em segundo plano, você deve concluir as seguintes tarefas:

  • Defina um AsJob[switch] parâmetro para que o utilizador possa decidir se executa o cmdlet como trabalho em segundo plano.

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

  • Em um método de processamento de registros, adicione uma instrução if que detete 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 seguintes APIs são fornecidas pelo Windows PowerShell para gerir trabalhos em segundo plano.

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

System.Management.Automation.JobRepository Gerencia 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 que é gerado quando um trabalho em segundo plano muda de estado.

Comandamentos de Trabalho PowerShell do Windows

Os seguintes cmdlets são fornecidos pelo Windows PowerShell para gerir trabalhos em segundo plano.

Arranja-Emprego

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

Receber-Emprego

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

Remove-Job

Elimina um trabalho em segundo plano do PowerShell do Windows.

Emprego de Início

Inicia um trabalho de fundo no PowerShell do Windows.

Stop-Job

Para um trabalho em segundo plano do PowerShell do Windows.

Wait-Job

Suprime o prompt de comandos até que um ou todos os trabalhos em segundo plano do PowerShell do Windows a correr na sessão estejam completos.

Ver também

A escrever um Windows PowerShell Cmdlet