TÓPICO
    about_Remote_Jobs

DESCRIÇÃO RESUMIDA
    Descreve como executar trabalhos em segundo plano em computadores 
    remotos.

DESCRIÇÃO DETALHADA
    Um trabalho em segundo plano é um comando executado de modo 
    assíncrono sem interagir com a sessão atual. O prompt de comando 
    é retornado imediatamente e você pode continuar usando a sessão 
    enquanto o trabalho é executado.

    Por padrão, trabalhos em segundo plano são executados no 
    computador local. No entanto, você pode usar vários procedimentos 
    diferentes para executar trabalhos em segundo plano nos 
    computadores remotos. 

    Este tópico explica como executar um trabalho em segundo plano em 
    um computador remoto. Para obter informações sobre como executar 
    trabalhos em segundo plano em um computador local, consulte 
    about_Jobs. Para obter mais informações sobre trabalhos em 
    segundo plano, consulte about_Job_Details.


 TRABALHOS EM SEGUNDO PLANO

    Você pode executar trabalhos em segundo plano em computadores 
    remotos usando três métodos diferentes. 

    -- Inicie uma sessão interativa com um computador remoto e inicie 
       um trabalho na sessão interativa. Os procedimentos são os 
       mesmos executados durante a execução de um trabalho local, 
       embora todas as ações sejam executadas no computador remoto.

    -- Execute um trabalho em segundo plano em um computador remoto 
       que retorne seus resultados ao computador local. Use este 
       método quando você quiser coletar os resultados de trabalhos 
       em segundo plano e mantê-los em um local central no computador 
       local.

    -- Execute um trabalho em segundo plano em um computador remoto 
       que mantenha seus resultados nesse computador. Use este método 
       quando os dados do trabalho forem mantidos com mais segurança 
       no computador de origem.  

 INICIAR UM TRABALHO EM SEGUNDO PLANO EM UMA SESSÃO INTERATIVA

    Você pode iniciar uma sessão interativa com um computador remoto 
    e, em seguida, iniciar um trabalho em segundo plano na sessão 
    interativa. Para obter mais informações sobre as sessões 
    interativas, consulte about_Remote e Enter-PSSession.

    O procedimento para iniciar um trabalho em segundo plano em uma 
    sessão interativa é quase idêntico ao procedimento para iniciar 
    um trabalho em segundo plano no computador local. No entanto, 
    todas as operações ocorrem no computador remoto, e não no 
    computador local.


    ETAPA 1: ENTER-PSSESSION

    Use o cmdlet Enter-PSSession para iniciar uma sessão interativa 
    com um computador remoto. Você pode usar o parâmetro ComputerName 
    de Enter-PSSession para estabelecer uma conexão temporária para 
    a sessão interativa. Você pode usar o parâmetro Session para 
    executar a sessão interativa em uma sessão do Windows PowerShell 
    (PSSession). 

    O comando a seguir inicia uma sessão interativa no computador 
    Server01.
  
        C:\PS> Enter-PSSession -computername Server01

    O prompt de comando é alterado para indicar que agora você está 
    conectado ao computador Server01.

        Server01\C:>


    ETAPA 2: START-JOB

    Para iniciar um trabalho em segundo plano na sessão, use o cmdlet 
    Start-Job.

    O comando a seguir executa um trabalho em segundo plano que 
    insere os eventos no log de eventos do Windows PowerShell no 
    computador Server01. O cmdlet Start-Job retorna um objeto que 
    representa o trabalho. 

    Esse comando salva o objeto de trabalho na variável $job. 

        Server01\C:> $job = start-job -scriptblock {get-eventlog "Windows PowerShell"}
           
    Enquanto o trabalho estiver em execução, você poderá usar 
    a sessão interativa para executar outros comandos, inclusive outros 
    trabalhos em segundo plano. No entanto, você deve manter a sessão 
    interativa aberta até que o trabalho seja concluído. Se você 
    encerrar a sessão, o trabalho será interrompido e os resultados 
    serão perdidos.



    ETAPA 3: GET-JOB

    Para descobrir se o trabalho foi concluído, exiba o valor da 
    variável $job ou use o cmdlet Get-Job para obter o trabalho. 
    O comando a seguir usa o cmdlet Get-Job para exibir o trabalho.

        Server01\C:> get-job $job

        SessionId  Name  State      HasMoreData  Location   Command
        ---------  ----  -----      -----------  --------   -------
        1          Job1  Complete   True         localhost  get-eventlog "Windows PowerShell"
        
   
    A saída de Get-Job mostra que o trabalho está sendo executado no 
    computador "localhost" porque o trabalho foi iniciado e estava em 
    execução no mesmo computador (neste caso, Server01).
    


    ETAPA 4: RECEIVE-JOB

    Para obter os resultados do trabalho, use o cmdlet Receive-Job. 
    Você pode exibir os resultados na sessão interativa ou salvá-los 
    em um arquivo no computador remoto. O comando a seguir obtém os 
    resultados do trabalho na variável $job. O comando usa o operador 
    de redirecionamento (>) para salvar os resultados do trabalho no 
    arquivo PsLog.txt no computador Server01.

        Server01\C:> receive-job $job > c:\logs\PsLog.txt



    ETAPA 5: EXIT-PSSESSION

    Para encerrar a sessão interativa, use o cmdlet Exit-PSSession. 
    O prompt de comando é alterado para indicar que você está novamente 
    na sessão original no computador local.

        Server01\C:> Exit-PSSession
        C:\PS>
         


    ETAPA 6: INVOKE-COMMAND: OBTER CONTEÚDO
     
    Para exibir o conteúdo do arquivo PsLog.txt no computador 
    Server01 a qualquer momento, inicie outra sessão interativa ou 
    execute um comando remoto. Este tipo de comando é melhor 
    executado em uma PSSession (uma conexão persistente) caso você 
    queira usar vários comandos para investigar e gerenciar os dados 
    no arquivo PsLog.txt. Para obter mais informações sobre as 
    PSSessions, consulte about_PSSessions.

    Os comandos a seguir usam o cmdlet New-PSSession para criar uma 
    PSSession conectada ao computador Server01 e usam o cmdlet 
    Invoke-Command para executar o comando Get-Content na PSSession 
    a fim de exibir o conteúdo do arquivo.

        C:\PS> $s = new-pssession -computername Server01
        C:\PS> invoke-command -session $s -scriptblock {get-content c:\logs\pslog.txt}
        

      
 INICIAR UM TRABALHO REMOTO QUE RETORNE OS RESULTADOS AO COMPUTADOR 
 LOCAL (ASJOB)

    Para iniciar um trabalho em segundo plano em um computador remoto 
    que retorne os resultados do comando ao computador local, use o 
    parâmetro AsJob de um cmdlet como o Invoke-Command. 

    Quando você usar o parâmetro AsJob, o objeto de trabalho será 
    criado no computador local, mesmo que o trabalho seja executado 
    no computador remoto. Quando o trabalho for concluído, os 
    resultados serão retornados ao computador local. 

    Você pode usar os cmdlets que contêm a palavra Job (os cmdlets 
    Job) para gerenciar qualquer trabalho criado por qualquer cmdlet. 
    Vários cmdlets que têm os parâmetros AsJob não usam a comunicação 
    remota do Windows PowerShell, portanto, você pode usá-los até 
    mesmo em computadores que não estejam configurados para comunicação 
    remota e que não atendam aos requisitos dessa comunicação.
 

    ETAPA 1: INVOKE-COMMAND -ASJOB

    O comando a seguir usa o parâmetro AsJob de Invoke-Command para 
    iniciar um trabalho em segundo plano no computador Server01. 
    O trabalho executa um comando Get-Eventlog que obtém os eventos no 
    log do sistema. Você pode usar o parâmetro JobName para atribuir 
    um nome para exibição ao trabalho.

       invoke-command -computername Server01 -scriptblock {get-eventlog system} -asjob 
       

    Os resultados do comando se assemelham à saída de exemplo a seguir.


       SessionId   Name    State      HasMoreData     Location   Command
       ---------   ----    -----      -----------     --------   -------
       1           Job1    Running    True            Server01   get-eventlog system
       

    Quando o parâmetro AsJob for usado, Invoke-Command retornará 
    o mesmo tipo de objeto de trabalho que Start-Job. Você pode salvar 
    o objeto de trabalho em uma variável ou pode usar um comando 
    Get-Job para obter o trabalho.

    Observe que o valor da propriedade Location mostra que o trabalho 
    foi executado no computador Server01.  


    ETAPA 2: GET-JOB

    Para gerenciar um trabalho iniciado com o parâmetro AsJob do 
    cmdlet Invoke-Command, use os cmdlets Job. Como o objeto de 
    trabalho que representa o trabalho remoto está no computador 
    local, você não precisa executar os comandos remotos para 
    gerenciar o trabalho.  

    Para determinar se o trabalho foi concluído, use um comando Get-Job. 
    O comando a seguir obtém todos os trabalho iniciados na sessão atual. 
    
        get-job

    Como o trabalho remoto foi iniciado na sessão atual, um comando 
    Get-Job local obtém o trabalho. A propriedade State do objeto de 
    trabalho indica que o comando foi concluído com êxito.
       
       SessionId   Name   State      HasMoreData     Location   Command
       ---------   ----   -----      -----------     --------   -------
       1           Job1   Completed  True            Server01   get-eventlog system
       


    ETAPA 3: RECEIVE-JOB

    Para obter os resultados do trabalho, use o cmdlet Receive-Job. 
    Como os resultados do trabalho são automaticamente retornados ao 
    computador em que o objeto de trabalho reside, você pode obter os 
    resultados com um comando Receive-Job local.

    O comando a seguir usa o cmdlet Receive-Job para obter os 
    resultados do trabalho. Ele usa a ID da sessão para identificar 
    o trabalho e salva os resultados do trabalho na variável $results. 
    Você também pode redirecionar os resultados para um arquivo.

       $results = receive-job -id 1
    


 INICIAR UM TRABALHO REMOTO QUE MANTENHA OS RESULTADOS NO COMPUTADOR 
 REMOTO

    Para iniciar um trabalho em segundo plano em um computador remoto 
    que mantenha os resultados do comando nesse computador, use o 
    cmdlet Invoke-Command para executar um comando Start-Job em um 
    computador remoto. Você pode usar esse método para executar 
    trabalhos em segundo plano em vários computadores.

    Quando você executa um comando Start-Job remotamente, o objeto de 
    trabalho é criado no computador remoto e os resultados do 
    trabalho são mantidos nesse computador.
    Sob a perspectiva do trabalho, todas as operações são locais. 
    Você apenas está executando comandos remotamente para gerenciar 
    um trabalho local no computador remoto.


    ETAPA 1: INVOKE-COMMAND START-JOB

    Use o cmdlet Invoke-Command para executar um comando Start-Job em 
    um computador remoto. 

    Esse comando requer uma PSSession (uma conexão persistente). 
    Se você usar o parâmetro ComputerName de Invoke-Command para 
    estabelecer uma conexão temporária, o comando Invoke-Command será 
    considerado concluído quando o objeto de trabalho for retornado. 
    Como resultado, a conexão temporária será fechada e o trabalho, 
    cancelado.
 
    O comando a seguir usa o cmdlet New-PSSession para criar uma 
    PSSession que esteja conectada ao computador Server01. O comando 
    salva a PSSession na variável $s.

        $s = new-pssession -computername Server01


    O comando a seguir usa o cmdlet Invoke-Command para executar um 
    comando Start-Job na PSSession. Os comandos Start-Job e Get-Eventlog 
    são colocados entre chaves.

       invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}}
       
    Os resultados se assemelham à saída de exemplo a seguir.


       Id       Name    State      HasMoreData     Location   Command
       --       ----    -----      -----------     --------   -------
       2        Job2    Running    True            Localhost  get-eventlog system
       

    Quando você executar um comando Start-Job remotamente, 
    Invoke-Command retornará o mesmo tipo de objeto de trabalho que 
    Start-Job. Você pode salvar o objeto de trabalho em uma variável 
    ou pode usar um comando Get-Job para obter o trabalho.

    Observe que o valor da propriedade Location indica que o trabalho 
    foi executado no computador local, conhecido como "LocalHost", 
    mesmo que o trabalho tenha sido executado no computador Server01. 
    Como o objeto de trabalho foi criado no computador Server01 e o 
    trabalho foi executado no mesmo computador, ele é considerado um 
    trabalho em segundo plano local.  


    ETAPA 2: INVOKE-COMMAND GET-JOB

    Para gerenciar um trabalho em segundo plano, use os cmdlets Job. 
    Como o objeto de trabalho está no computador remoto, você não 
    precisa executar os comandos remotos para obter, interromper, 
    aguardar ou recuperar os resultados do trabalho.  

    Para verificar se o trabalho foi concluído, use um comando 
    Invoke-Command para executar um comando Get-Job na PSSession 
    conectada ao computador Server01.

        invoke-command -session $s -scriptblock {get-job}

    O comando retorna um objeto de trabalho. A propriedade State do 
    objeto de trabalho 

       SessionId       Name    State      HasMoreData     Location   Command
       ---------       ----    -----      -----------     --------   -------
       2               Job2    Completed  True            LocalHost  get-eventlog system 
       

    ETAPA 3: INVOKE-COMMAND RECEIVE-JOB

    Para obter os resultados do trabalho, use o cmdlet Invoke-Command 
    para executar um comando Receive-Job na PSSession conectada ao 
    computador Server01.

    O comando a seguir usa o cmdlet Receive-Job para obter os 
    resultados do trabalho. Ele usa a ID da sessão para identificar 
    o trabalho e salva os resultados do trabalho na variável $results. 
    Ele usa o parâmetro Keep de Receive-Job para manter o resultado 
    no cache de trabalho no computador remoto.

        $results = invoke-command -session $s -scriptblock {receive-job -sessionid 2 -keep}
        
    Você também pode redirecionar os resultados para um arquivo no 
    computador local ou remoto. O comando a seguir usa um operador de 
    redirecionamento para salvar os resultados em um arquivo no 
    computador Server01.

        invoke-command -session $s -command {receive-job -sessionid 2 > c:\logs\pslog.txt}
        

CONSULTE TAMBÉM
    about_Jobs
    about_Job_Details
    about_Remote
    Invoke-Command
    Start-Job
    Get-Job
    Wait-Job
    Stop-Job
    Remove-Job
    New-PSSession
    Enter-PSSession
    Exit-PSSession




Sumário