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 de terminação são:
- Concluído
- Com 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 de espera máximo 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 forem concluídos, Wait-Job
retornará um objeto de trabalho e continuará a execução.
Você pode usar o Wait-Job
cmdlet para aguardar os 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 habilitar Wait-Job
a espera por 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 Get-Job
cmdlet, usando o Import-Module
cmdlet ou usando ou obtendo um cmdlet no módulo. Para obter informações sobre um tipo específico de trabalho personalizado, 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 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 . Os Start-Job
comandos e Wait-Job
são enviados para o 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 de Windows PowerShell (PSSession) em cada um dos três computadores remotos e os armazena na $s
variável .
O segundo comando usa Invoke-Command
para executar Start-Job
em cada uma das três sessões no $s
.
Todos os trabalhos são denominados Date1.
O terceiro comando usa Invoke-Command
para executar Wait-Job
. Esse 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 é 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 Wait-Job
cmdlet para aguardar a conclusão dos 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 ele seja executado antes do New-PSSession
comando.
O segundo comando armazena uma Get-EventLog
cadeia de caracteres de comando, entre aspas, na $c
variável .
O terceiro comando usa Invoke-Command
o cmdlet para ser executado Start-Job
em cada uma das sessões no $s
.
O Start-Job
comando inicia um trabalho que executa o Get-EventLog
comando na $c
variável .
O comando usa o modificador de escopo Using para indicar que a $c
variável foi definida no computador local. O modificador de escopo Using foi introduzido no Windows PowerShell 3.0. Para obter mais informações sobre o modificador de escopo Using , 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 encerrando 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 Wait-Job
para definir um tempo de espera máximo 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 armazena os objetos PSSession na $s
variável .
O segundo comando usa Invoke-Command
para executar Start-Job
em cada um dos objetos PSSession no $s
. Ele armazena os objetos de trabalho resultantes na $jobs
variável .
O terceiro comando usa Invoke-Command
para executar Wait-Job
em cada uma das sessões no $s
. O Wait-Job
comando 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 de espera máximo e armazena os resultados do comando na $done
variável .
Nesse 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: aguardar até que um dos vários trabalhos seja concluído
Wait-Job -id 1,2,5 -Any
Esse comando identifica três trabalhos por suas IDs e aguarda até que qualquer um deles esteja em um 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 Wait-Job
cmdlet 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 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 for concluído, o comando exibirá o objeto de trabalho, que contém informações sobre o trabalho.
Exemplo 9: aguarde 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 o 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 para determinar se um Get-Process
comando em execução nas sessões em três computadores remotos Wait-Job
está em um estado de encerramento.
O primeiro comando cria objetos PSSession em três computadores e os armazena na $s
variável .
O segundo comando usa Invoke-Command
para executar Get-Process
em cada uma das três sessões no $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 nesse caso, pois o trabalho reside no computador local.
Exemplo 10: aguardar um trabalho que tenha uma 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 um tabela de hash de condições. Esse cmdlet aguarda 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.
Este parâmetro funciona somente em tipos de trabalho personalizados, como os de fluxo de trabalho e os 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 este parâmetro, consulte o tópico da Ajuda para o tipo de trabalho em questão.
Este 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 falha
- Parado
- Suspenso
- Desconectado
Este 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 para os quais esse cmdlet aguarda.
A ID é um 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
.
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 para os 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 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 para os quais esse cmdlet aguarda. Insira uma variável que contém 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 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 para os 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. Esse cmdlet aguarda apenas trabalhos no estado especificado. Os valores aceitáveis para esse parâmetro são:
- NotStarted
- Executando
- Concluído
- Com falha
- Parado
- Bloqueado
- Suspenso
- Desconectado
- Suspensão
- Parando
Para obter mais informações sobre estados de trabalho, consulte Enumeração JobState.
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 terminará e a execução continuará, 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 redirecionar um objeto de trabalho para esse cmdlet.
Saídas
System.Management.Automation.PSRemotingJob
Esse 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.
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
- Com falha
- Parado
- Suspenso
- Desconectado
Para direcionar Wait-Job
para continuar aguardando trabalhos Suspensos e Desconectados, use o parâmetro Force .