Wait-Job

Aguarda até que um ou todos os trabalhos do PowerShell em execução na sessão estejam em um estado de encerramento.

Syntax

Wait-Job
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [-Id] <Int32[]>
    [<CommonParameters>]
Wait-Job
    [-Job] <Job[]>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]
Wait-Job
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [-Name] <String[]>
    [<CommonParameters>]
Wait-Job
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [-InstanceId] <Guid[]>
    [<CommonParameters>]
Wait-Job
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [-State] <JobState>
    [<CommonParameters>]
Wait-Job
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [-Filter] <Hashtable>
    [<CommonParameters>]

Description

O Wait-Job cmdlet aguarda que um trabalho esteja em um estado de encerramento antes de continuar a execução. Os estados terminantes são:

  • Concluído
  • Com falhas
  • Parado
  • Suspenso
  • Desligado

Você pode esperar até que um trabalho especificado ou todos os trabalhos estejam em um estado de encerramento. Você também pode definir um tempo máximo de espera para o trabalho usando o parâmetro Timeout ou usar o parâmetro Force para aguardar um trabalho nos Suspended estados ou Disconnected .

Quando os comandos no trabalho estiverem concluídos, Wait-Job retorna um objeto de trabalho e continua a execução.

Você pode usar o Wait-Job cmdlet para aguardar trabalhos iniciados usando o Start-Job cmdlet ou o parâmetro AsJob do Invoke-Command cmdlet. Para obter mais informações sobre trabalhos, consulte about_Jobs.

A partir do Windows PowerShell 3.0, o Wait-Job cmdlet também aguarda tipos de trabalho personalizados, como trabalhos de fluxo de trabalho e instâncias de trabalhos agendados. Para permitir aguardar Wait-Job trabalhos de um tipo específico, importe o módulo que suporta o tipo de trabalho personalizado para a sessão antes de executar o Get-Job cmdlet, usando o Import-Module cmdlet ou usando ou obtendo um cmdlet no módulo. Para obter informações sobre um tipo de trabalho personalizado específico, consulte a documentação do recurso de tipo de trabalho personalizado.

Exemplos

Exemplo 1: Aguarde todos os trabalhos

Get-Job | Wait-Job

Este comando aguarda a conclusão de todos os trabalhos em execução na sessão.

Exemplo 2: Aguarde trabalhos iniciados em computadores remotos usando Start-Job

$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$done.Count

3

Este exemplo mostra como usar o Wait-Job cmdlet com trabalhos iniciados em computadores remotos usando o Start-Job cmdlet. Ambos Start-Job os comandos e Wait-Job são enviados ao computador remoto usando o Invoke-Command cmdlet.

Este exemplo usa Wait-Job para determinar se um Get-Date comando em execução como um trabalho em três computadores diferentes foi concluído.

O primeiro comando cria uma sessão do Windows PowerShell (PSSession) em cada um dos três computadores remotos e os armazena $s na variável.

O segundo comando é usado Invoke-Command para ser executado Start-Job em cada uma das três sessões do $s. Todos os trabalhos são nomeados Date1.

O terceiro comando usa Invoke-Command para executar Wait-Jobo . Este comando aguarda a conclusão dos Date1 trabalhos em cada computador. Ele armazena a coleção resultante (matriz) de objetos de trabalho na $done variável.

O quarto comando usa a propriedade Count da matriz de objetos de trabalho na $done variável para determinar quantos dos trabalhos foram concluídos.

Exemplo 3: Determinar quando o primeiro trabalho termina

$s = New-PSSession -ComputerName (Get-Content -Path .\Machines.txt)
$c = 'Get-EventLog -LogName System | Where-Object {$PSItem.EntryType -eq "error" --and $PSItem.Source -eq "LSASRV"} | Out-File -FilePath Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}

Este exemplo usa o parâmetro Any de Wait-Job para determinar quando o primeiro de muitos trabalhos em execução na sessão atual está em um estado de encerramento. Ele também mostra como usar o cmdlet para aguardar a conclusão de Wait-Job trabalhos remotos.

O primeiro comando cria uma PSSession em cada um dos computadores listados no arquivo Machines.txt e armazena os objetos PSSession na $s variável. O comando usa o Get-Content cmdlet para obter o conteúdo do arquivo. O Get-Content comando é colocado entre parênteses para garantir que é executado antes do New-PSSession comando.

O segundo comando armazena uma cadeia de Get-EventLog comando, entre aspas, na $c variável.

O terceiro comando usa Invoke-Command cmdlet para ser executado Start-Job em cada uma das sessões do $s. O Start-Job comando inicia um trabalho que executa o Get-EventLog comando na $c variável.

O comando usa o modificador Usando escopo para indicar que a $c variável foi definida no computador local. O modificador de escopo Usando é introduzido no Windows PowerShell 3.0. Para obter mais informações sobre o modificador de escopo Usando , consulte about_Remote_Variables.

O quarto comando usa Invoke-Command para executar um Wait-Job comando nas sessões. Ele usa o parâmetro Any para aguardar até que o primeiro trabalho nos computadores remotos esteja terminando o estado.

Exemplo 4: Definir um tempo de espera para trabalhos em computadores remotos

PS> $s = New-PSSession -ComputerName Server01, Server02, Server03
PS> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
PS>

Este exemplo mostra como usar o parâmetro Timeout de para definir um tempo máximo de Wait-Job espera para os trabalhos em execução em computadores remotos.

O primeiro comando cria uma PSSession em cada um dos três computadores remotos (Server01, Server02 e Server03) e, em seguida, armazena $s os objetos PSSession na variável.

O segundo comando é usado Invoke-Command para ser executado Start-Job em cada um dos objetos PSSession no $s. Ele armazena os objetos de trabalho resultantes na $jobs variável.

O terceiro comando é executado Invoke-CommandWait-Job em cada uma das sessões do $s. O Wait-Job comando determina se todos os comandos foram concluídos em 30 segundos. Ele usa o parâmetro Timeout com um valor de 30 para estabelecer o tempo máximo de espera e, em seguida, armazena os resultados do comando na $done variável.

Neste caso, após 30 segundos, apenas o comando no computador Server02 foi concluído. Wait-Job encerra a espera, retorna o objeto que representa o trabalho que foi concluído e exibe o prompt de comando.

A $done variável contém um objeto de trabalho que representa o trabalho executado no Server02.

Exemplo 5: Aguarde até que um dos vários trabalhos termine

Wait-Job -id 1,2,5 -Any

Este comando identifica três trabalhos por seus IDs e aguarda até que qualquer um deles esteja em um estado de encerramento. A execução continua quando o primeiro trabalho termina.

Exemplo 6: Aguarde um período e, em seguida, permita que o trabalho continue em segundo plano

Wait-Job -Name "DailyLog" -Timeout 120

Este comando aguarda 120 segundos (dois minutos) para que o trabalho do DailyLog seja concluído. Se o trabalho não terminar nos próximos dois minutos, a execução continuará e o trabalho continuará a ser executado em segundo plano.

Exemplo 7: Aguarde um trabalho pelo nome

Wait-Job -Name "Job3"

Este comando usa o nome do trabalho para identificar o trabalho pelo qual aguardar.

Exemplo 8: Aguarde trabalhos no computador local iniciados com Start-Job

$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1| Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job

Este exemplo mostra como usar o Wait-Job cmdlet com trabalhos iniciados no computador local usando Start-Jobo .

Esses comandos iniciam um trabalho que obtém os arquivos de script do Windows PowerShell que foram adicionados ou atualizados na última semana.

O primeiro comando é usado Start-Job para iniciar um trabalho no computador local. O trabalho executa um Get-ChildItem comando que obtém todos os arquivos que têm uma extensão de nome de arquivo .ps1 que foram adicionados ou atualizados na última semana.

O terceiro comando usa Wait-Job para aguardar até que o trabalho esteja em um estado de encerramento. Quando o trabalho é concluído, o comando exibe o objeto de trabalho, que contém informações sobre o trabalho.

Exemplo 9: Aguarde trabalhos iniciados em computadores remotos usando Invoke-Command

$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job

Este exemplo mostra como usar Wait-Job com trabalhos iniciados em computadores remotos usando o parâmetro AsJob de Invoke-Command. Ao usar AsJob, o trabalho é criado no computador local e os resultados são retornados automaticamente para o computador local, mesmo que o trabalho seja executado nos computadores remotos.

Este exemplo usa Wait-Job para determinar se um Get-Process comando em execução nas sessões em três computadores remotos está em um estado de encerramento.

O primeiro comando cria objetos PSSession em três computadores e os armazena $s na variável.

O segundo comando é usado Invoke-Command para ser executado Get-Process em cada uma das três sessões do $s. O comando usa o parâmetro AsJob para executar o comando de forma assíncrona como um trabalho. O comando retorna um objeto de trabalho, assim como os trabalhos iniciados usando Start-Job, e o objeto de trabalho é armazenado na $j variável.

O terceiro comando usa um operador de pipeline (|) para enviar o objeto $j de trabalho para o Wait-Job cmdlet. Um Invoke-Command comando não é necessário neste caso, porque o trabalho reside no computador local.

Exemplo 10: Aguarde um trabalho que tenha um ID

Get-Job

Id   Name     State      HasMoreData     Location             Command
--   ----     -----      -----------     --------             -------
1    Job1     Completed  True            localhost,Server01.. get-service
4    Job4     Completed  True            localhost            dir | where

Wait-Job -Id 1

Este comando aguarda o trabalho com um valor de ID de 1.

Parâmetros

-Any

Indica que esse cmdlet retorna o objeto de trabalho e continua a execução quando qualquer trabalho é concluído. Por padrão, Wait-Job aguarda até que todos os trabalhos especificados sejam concluídos antes de exibir o prompt.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Filter

Especifica uma tabela hash de condições. Este cmdlet aguarda por tarefas que cumprem todas as condições da tabela hash. Introduz uma tabela hash na qual as chaves são propriedades da tarefa e os valores são valores da propriedade da tarefa.

Esse parâmetro funciona apenas em tipos de trabalho personalizados, como trabalhos de fluxo de trabalho e trabalhos agendados. Ele não funciona em trabalhos padrão, como aqueles criados usando o Start-Job cmdlet. Para obter informações sobre o suporte para esse parâmetro, consulte o tópico de ajuda para o tipo de trabalho.

Esse parâmetro foi introduzido no Windows PowerShell 3.0.

Type:Hashtable
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Force

Indica que esse cmdlet continua aguardando trabalhos no estado Suspenso ou Desconectado. Por padrão, Wait-Job retorna ou encerra a espera quando os trabalhos estão em um dos seguintes estados:

  • Concluído
  • Com falhas
  • Parado
  • Suspenso
  • Desligado

Esse parâmetro foi introduzido no Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

Especifica uma matriz de IDs de trabalhos pelos quais esse cmdlet aguarda.

O ID é um número inteiro que identifica exclusivamente o trabalho na sessão atual. É mais fácil de lembrar e digitar do que o ID da instância, mas é exclusivo apenas na sessão atual. Você pode digitar um ou mais IDs, separados por vírgulas. Para encontrar a ID de um trabalho, digite Get-Job.

Type:Int32[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-InstanceId

Especifica uma matriz de IDs de instância de trabalhos pelos quais esse cmdlet aguarda. O padrão é todos os trabalhos.

Um ID de instância é um GUID que identifica exclusivamente o trabalho no computador. Para localizar o ID da instância de um trabalho, use Get-Job.

Type:Guid[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Job

Especifica os trabalhos pelos quais esse cmdlet aguarda. Insira uma variável que contenha os objetos de trabalho ou um comando que obtenha os objetos de trabalho. Você também pode usar um operador de pipeline para enviar objetos de trabalho para o Wait-Job cmdlet. Por padrão, Wait-Job aguarda todos os trabalhos criados na sessão atual.

Type:Job[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Name

Especifica nomes amigáveis de trabalhos pelos quais esse cmdlet aguarda.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-State

Especifica um estado de trabalho. Este cmdlet aguarda apenas trabalhos no estado especificado. Os valores aceitáveis para este parâmetro são:

  • NotStarted
  • Em Execução
  • Concluído
  • Com falhas
  • Parado
  • Bloqueado
  • Suspenso
  • Desligado
  • A suspender
  • A parar

Para obter mais informações sobre estados de trabalho, consulte JobState Enumeration.

Type:JobState
Accepted values:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Timeout

Especifica o tempo máximo de espera para cada trabalho, em segundos. O valor padrão, -1, indica que o cmdlet aguarda até que o trabalho seja concluído. O tempo começa quando você envia o Wait-Job comando, não o Start-Job comando.

Se esse tempo for excedido, a espera termina e a execução continua, mesmo que o trabalho ainda esteja em execução. O comando não exibe nenhuma mensagem de erro.

Type:Int32
Aliases:TimeoutSec
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entradas

System.Management.Automation.RemotingJob

Você pode canalizar um objeto de trabalho para este cmdlet.

Saídas

System.Management.Automation.PSRemotingJob

Este cmdlet retorna objetos de trabalho que representam os trabalhos em um estado de encerramento. Se a espera terminar porque o valor do parâmetro Timeout for excedido, Wait-Job não retornará nenhum objeto.

Notas

O PowerShell inclui os seguintes aliases para Wait-Job:

  • Todas as plataformas:
    • wjb

Por padrão, Wait-Job retorna ou encerra a espera quando os trabalhos estão em um dos seguintes estados:

  • Concluído
  • Com falhas
  • Parado
  • Suspenso
  • Desligado

Para direcionar Wait-Job para continuar a aguardar trabalhos Suspensos e Desconectados, use o parâmetro Force .