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




Sumário