TÓPICO
about_Job_Details
DESCRIÇÃO RESUMIDA
Fornece detalhes sobre os trabalhos de segundo plano em
computadores locais e remotos.
DESCRIÇÃO DETALHADA
Este tópico explica o conceito de um trabalho de segundo plano e
fornece informações técnicas sobre como esses trabalhos funcionam
no Windows PowerShell.
Este tópico é um complemento dos tópicos about_Jobs e
about_Remote_Jobs.
Importante: os trabalhos de segundo plano iniciados utilizando o
parâmetro Start-Job ou AsJob de Invoke-Command contam
com a infraestrutura remota do Windows PowerShell. Para
usar esses recursos, o Windows PowerShell deve ser configurado
para execução remota, mesmo se o trabalho de segundo plano for
executado somente no computador local. Para obter mais informações,
consulte about_Remote_Requirements.
SOBRE TRABALHOS DE SEGUNDO PLANO
Um trabalho de segundo plano executa um comando ou uma expressão
de modo assíncrono. Ele pode executar um cmdlet, uma função, um
script ou qualquer outra tarefa baseada em comando. É projetado
para executar comandos que demoram mais para serem executados,
mas você pode usá-lo para executar qualquer comando em segundo plano.
Quando um comando síncrono é executado, o prompt de comando do Windows
PowerShell é suprimido até que o comando esteja concluído. Porém, um
trabalho de segundo plano não suprime o prompt do Windows PowerShell.
Um comando usado para iniciar um trabalho de segundo plano retorna um
objeto de trabalho. O prompt é retornado imediatamente para que você
possa trabalhar em outras tarefas enquanto o trabalho de segundo
plano é executado.
Entretanto, ao iniciar um trabalho de segundo plano, você não obtém os
resultados de modo imediato, mesmo que o trabalho seja executado
rapidamente. O objeto retornado contém informações úteis sobre o
trabalho, mas não contém os resultados do trabalho. Você deve
executar um comando separado para obter os resultados do trabalho.
Você também pode executar comandos para parar o trabalho, aguardar
sua conclusão e excluí-lo.
Para tornar o cronômetro de um trabalho de segundo plano
independente de outros comandos, cada trabalho desses trabalhos é
executado em seu próprio ambiente Windows PowerShell (uma "sessão").
Entretanto, ele pode ser uma conexão temporária, criada somente para
executar o trabalho e depois excluída, uma sessão persistente
(a PSSession) que você pode usar para executar vários trabalhos ou
comandos relacionados.
USANDO OS CMDLETS DE TRABALHO
Use um comando Start-Job para iniciar um trabalho de segundo
plano em um computador local. O Start-Job retorna um objeto de
trabalho. Você também pode obter objetos que representam os
trabalhos que foram iniciados em um computador local utilizando o
cmdlet Get-Job.
Para obter os resultados do trabalho, use um comando Receive-Job.
Se o trabalho não for concluído, Receive-Job retorna resultados
parciais. Você também pode usar o Wait-Job para suprimir o prompt
de comando até que um ou todos os trabalhos iniciados na sessão
sejam concluídos.
Para parar um trabalho de segundo plano, use o cmdlet Stop-Job.
Para excluir um trabalho, use o cmdlet Remove-Job.
Para obter mais informações sobre como os cmdlets funcionam,
consulte o tópico da Ajuda para cada cmdlet e about_Jobs.
INICIANDO TRABALHOS DE SEGUNDO PLANO EM COMPUTADORES REMOTOS
Você pode criar e gerenciar trabalhos de segundo plano em um
computador local ou remoto. Para executar um trabalho de segundo
plano remotamente, use o parâmetro AsJob de um cmdlet como
Invoke-Command ou use o cmdlet Invoke-Command para executar um
comando Start-Job remotamente. Você também pode iniciar um
trabalho de segundo plano em uma sessão interativa.
Para obter mais informações sobre trabalhos de segundo plano
remotos, consulte about_Remote_Jobs.
TRABALHOS FILHOS
Cada trabalho de segundo plano consiste em um trabalho pai e em
um ou mais trabalhos filhos. Em trabalhos iniciados utilizado o
parâmetro Start-Job ou AsJob de Invoke-Command, o trabalho pai é
um executivo. Ele não executa nenhum comando nem retorna nenhum
resultado. Os comandos são executados realmente pelos trabalhos
filhos. (Os trabalhos iniciados com o uso de outros cmdlets pode
funcionar de modo diferente.)
Os trabalhos filhos são armazenados na propriedade ChildJobs do
objeto do trabalho pai. A propriedade ChildJobs pode conter um ou
mais objetos de trabalho filho. Os objetos de trabalho filho têm
nome, ID e ID de instância diferentes do trabalho pai para que
você possa gerenciar os trabalhos pai e filho individualmente ou
como uma unidade.
Para ver os trabalhos pai e filho em um trabalho, use o cmdlet
Get-Job para obter o trabalho pai e, em seguida, envie-o para um
comando Format-List que exibe as propriedades Name e ChildJobs
dos objetos, como mostrado no seguinte comando.
C:\PS> get-job | format-list -property Name, ChildJobs
Name : Job1
ChildJobs : {Job2}
Também é possível usar um comando Get-Job no objeto filho, como
mostrado no seguinte comando:
C:\PS> get-job job2
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
2 Job2 Completed True localhost get-process
A configuração do objeto filho depende do comando que você usa
para iniciar o trabalho.
-- Quando você usa Start-Job para iniciar um trabalho em um
computador local, o trabalho consiste em um trabalho pai
executivo e um trabalho filho que executa o comando.
-- Quando você usa o parâmetro AsJob de Invoke-Command para
iniciar um trabalho em um ou mais computadores, o trabalho
consiste em um trabalho pai executivo e um trabalho filho
para cada trabalho em execução em cada computador.
-- Quando você usa Invoke-Command para executar um comando
Start-Job em um ou mais computadores remotos, o resultado é
igual ao de um comando local em execução em cada computador
remoto. O comando retorna um objeto de trabalho para cada
computador. O objeto de trabalho consiste em um trabalho
pai executivo e um trabalho filho que executa o comando.
O trabalho pai representa todos os trabalhos filho. Quando você
gerencia um trabalho pai, também gerencia os trabalhos filho
associados. Por exemplo, se você parar um trabalho pai, todos os
trabalhos filhos serão parados. Se você obtiver os resultados de
um trabalho pai, obterá resultados para todos os trabalhos filhos.
Entretanto, você também pode gerenciar trabalhos filho
individualmente. Isso é bastante útil quando você deseja
investigar um problema com um trabalho ou obter resultados de
apenas um de vários trabalhos filho iniciados utilizado o
parâmetro AsJob de Invoke-Command. (O caractere inverso [`] é um
caractere de continuação.)
O comando a seguir usa o parâmetro AsJob de Invoke-Command para
iniciar os trabalhos de segundo plano no computador local e em
dois computadores remotos. O comando salva o trabalho na variável $j.
C:\PS> $j = invoke-command -computername localhost, Server01, Server02 `
-command {get-date} -AsJob
Quando você exibe as propriedades Name e ChildJob do trabalho em
$j, vê-se que o comando retornou um objeto de trabalho com três
trabalhos filho, um para cada computador.
C:\PS> $j | format-list name, childjobs
Name : Job3
ChildJobs : {Job4, Job5, Job6}
Quando você exibe o trabalho pai, vê-se que o trabalho falhou.
C:\PS> $j
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job3 Failed True localhost,server... get-date
Mas quando você executa um comando Get-Job em cada um dos trabalhos filho,
vê-se que apenas um falhou.
PS C:\ps-test> get-job job4, job5, job6
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
4 Job4 Concluído True localhost get-date
5 Job5 Failed False Server01 get-date
6 Job6 Completed True Server02 get-date
Para obter os resultados de todos os trabalhos filho, use o
cmdlet Receive-Job para obter os resultados do trabalho pai. Mas
você também pode obter os resultados de um trabalho filho
específico, como mostrado no comando a seguir.
C:\PS> receive-job -job6 -keep | format-table ComputerName,
DateTime -auto
ComputerName DateTime
------------ --------
Server02 Quinta-feira, 13 de março de 2008 16:16:03
O recurso de trabalhos filho dos trabalhos de segundo plano do
Windows PowerShell permitem maior controle sobre os trabalhos que
você executa.
CONSULTE TAMBÉM
about_Jobs
about_Remote_Jobs
about_Remote
Invoke-Command
Start-Job
Get-Job
Wait-Job
Stop-Job
Remove-Job
New-PSSession
Enter-PSSession
Exit-PSSession