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