Compartilhar via


Wait-Job

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

Sintaxe

SessionIdParameterSet (Padrão)

Wait-Job
    [-Id] <Int32[]>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]

JobParameterSet

Wait-Job
    [-Job] <Job[]>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]

NameParameterSet

Wait-Job
    [-Name] <String[]>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]

InstanceIdParameterSet

Wait-Job
    [-InstanceId] <Guid[]>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]

StateParameterSet

Wait-Job
    [-State] <JobState>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]

FilterParameterSet

Wait-Job
    [-Filter] <Hashtable>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]

Description

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

  • Concluído
  • Falha
  • Parado
  • Suspenso
  • Desconectado

Você pode aguardar 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 estados Suspended ou Disconnected.

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

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

A partir do Windows PowerShell 3.0, o cmdlet Wait-Job também aguarda por tipos de trabalho personalizados, como trabalhos de fluxo de trabalho e instâncias de trabalhos agendados. Para habilitar que Wait-Job aguarde trabalhos de um tipo específico, importe o módulo que dá suporte ao tipo de trabalho personalizado para a sessão antes de executar o cmdlet Get-Job, usando o cmdlet Import-Module 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: Aguardar todos os trabalhos

Get-Job | Wait-Job

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

Exemplo 2: Aguardar os 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 cmdlet Wait-Job com trabalhos iniciados em computadores remotos usando o cmdlet Start-Job. Os comandos Start-Job e Wait-Job são enviados para o computador remoto usando o cmdlet Invoke-Command.

Este exemplo usa Wait-Job para determinar se um comando Get-Date 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 na variável $s.

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

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

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

Exemplo 3: Determinar quando o primeiro trabalho é concluído

$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 Wait-Job para aguardar a conclusão de trabalhos remotos.

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

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

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

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

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

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 Wait-Job para definir um tempo máximo de 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 os objetos de PSSession na variável $s.

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

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

Nesse caso, após 30 segundos, somente 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 variável $done contém um objeto de trabalho que representa o trabalho executado no Server02.

Exemplo 5: aguarde até que um dos vários trabalhos seja concluído

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

Esse comando identifica três trabalhos por seus identificadores e aguarda até que um deles esteja em estado de encerramento. A execução continua quando o primeiro trabalho é concluído.

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

Wait-Job -Name "DailyLog" -Timeout 120

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

Exemplo 7: Aguardar um trabalho por nome

Wait-Job -Name "Job3"

Esse comando usa o nome do trabalho para identificar o trabalho para o qual aguardar.

Exemplo 8: Aguardar 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 cmdlet Wait-Job com trabalhos iniciados no computador local usando Start-Job.

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 usa Start-Job para iniciar um trabalho no computador local. O trabalho executa um comando Get-ChildItem 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: Aguardar os 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 comando Get-Process 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 na variável $s.

O segundo comando usa Invoke-Command para executar Get-Process em cada uma das três sessões em $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 variável $j.

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

Exemplo 10: Aguardar 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.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Filter

Especifica uma tabela hash de condições. Este cmdlet aguarda os trabalhos que satisfaçam todas as condições na tabela de hash. Insira uma tabela de hash na qual as chaves são propriedades do trabalho e os valores são valores de propriedade do trabalho.

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 cmdlet Start-Job. 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.

Propriedades do parâmetro

Tipo:Hashtable
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

FilterParameterSet
Cargo:0
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:True
Valor dos argumentos restantes:False

-Force

Indica que esse cmdlet aguarda a continuidade de 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
  • Falha
  • Parado
  • Suspenso
  • Desconectado

Esse parâmetro foi introduzido no Windows PowerShell 3.0.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Id

Especifica uma matriz de IDs de trabalhos para os quais esse cmdlet aguarda.

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

Propriedades do parâmetro

Tipo:

Int32[]

Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

SessionIdParameterSet
Cargo:0
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:True
Valor dos argumentos restantes:False

-InstanceId

Especifica uma matriz de IDs de instância das tarefas para as quais esse cmdlet aguarda. O padrão é obter todos os trabalhos.

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

Propriedades do parâmetro

Tipo:

Guid[]

Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

InstanceIdParameterSet
Cargo:0
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:True
Valor dos argumentos restantes:False

-Job

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

Propriedades do parâmetro

Tipo:

Job[]

Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

JobParameterSet
Cargo:0
Obrigatório:True
Valor do pipeline:True
Valor do pipeline pelo nome da propriedade:True
Valor dos argumentos restantes:False

-Name

Especifica nomes amigáveis dos trabalhos para os quais este cmdlet aguarda.

Propriedades do parâmetro

Tipo:

String[]

Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

NameParameterSet
Cargo:0
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:True
Valor dos argumentos restantes:False

-State

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

  • NotStarted
  • Correndo
  • Concluído
  • Falha
  • Parado
  • Bloqueado
  • Suspenso
  • Desconectado
  • Suspensão
  • Parar

Para obter mais informações sobre os estados dos trabalhos, consulte Enumeração de JobState.

Propriedades do parâmetro

Tipo:JobState
Valor padrão:None
Valores aceitos:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

StateParameterSet
Cargo:0
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:True
Valor dos argumentos restantes: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 comando Wait-Job, não o comando Start-Job.

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

Propriedades do parâmetro

Tipo:Int32
Valor padrão:None
Dá suporte a curingas:False
DontShow:False
Aliases:TimeoutSec

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

CommonParameters

Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.

Entradas

System.Management.Automation.RemotingJob

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

Saídas

System.Management.Automation.PSRemotingJob

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

Observações

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
  • Falha
  • Parado
  • Suspenso
  • Desconectado

Para instruir Wait-Job a continuar aguardando trabalhos Suspensos e Desconectados, use o parâmetro Force.