about_Remote_Jobs

Aplica-se a: Windows PowerShell 2.0, Windows PowerShell 3.0

TÓPICO

about_Remote_Jobs

DESCRIÇÃO BREVE

Explica como executar trabalhos em segundo plano em computadores remotos.

DESCRIÇÃO DETALHADA

Um trabalho em segundo plano é um comando que é executado de forma assíncrona sem interagir com a sessão atual. O prompt de comando retorna imediatamente e você pode continuar a usar a sessão enquanto o trabalho é executado.

Por padrão, os 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 em 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 informações sobre trabalhos em segundo plano, consulte about_Jobs_Details.

TRABALHOS EM SEGUNDO PLANO REMOTO

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 iniciar um trabalho na sessão interativa. Os procedimentos são os mesmos que 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 retorna os resultados no computador local. Use esse método quando você deseja 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 mantém os resultados no computador local. Use esse método quando os dados de trabalho são 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, um trabalho em segundo plano durante a sessão interativa. Para obter mais informações sobre 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, 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. Ou você pode usar o parâmetro Session para executar a sessão interativa em uma Windows PowerShell® sessão (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 mostrar 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 obtém os eventos de Windows PowerShell log de eventos no computador Server01. O cmdlet Start-Job retorna um objeto que representa o trabalho.

Este comando salva o objeto do trabalho na variável $job.

        Server01\C:> $job = start-job -scriptblock {get-eventlog "Windows PowerShell"}

Enquanto o trabalho é executado, você pode usar a sessão interativa para executar outros comandos, incluindo 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 é 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 realizar 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 esse trabalho está em execução no computador "localhost" porque o trabalho foi iniciado e está em execução no mesmo computador (nesse 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 mostrar que você está novamente na sessão original no computador local.

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

ETAPA 6: INVOKE-COMMAND: GET-CONTENT

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. Esse tipo de comando é melhor executado em um PSSession (uma conexão persistente), caso você deseje usar vários comandos para investigar e gerenciar os dados no arquivo PsLog.txt. Para obter mais informações sobre PSSessions, consulte about_PSSessions.

Os comandos a seguir usam o cmdlet New-PSSession para criar um PSSession que está conectado ao computador Server01 e usam o cmdlet Invoke-Command para executar um comando Get-Content na PSSession para 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 RETORNA OS RESULTADOS PARA O COMPUTADOR LOCAL (ASJOB)

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

Quando você usa o parâmetro AsJob, o objeto de trabalho é realmente criado no computador local, embora o trabalho seja executado no computador remoto. Quando o trabalho for concluído, os resultados são retornados ao computador local.

Você pode usar os cmdlets que contêm o noun do trabalho (os cmdlets de trabalho) para gerenciar qualquer trabalho criado por qualquer cmdlet. Muitos dos cmdlets que têm parâmetros AsJob não usam Windows PowerShell remotamente, para que você possa usá-los até mesmo em computadores que não estão configurados para comunicação remota e não atendem aos requisitos de comunicação remota.

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 de exibição para o trabalho.

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

Os resultados do comando devem ser semelhantes à seguinte saída de exemplo.

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

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

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

ETAPA 2: GET-JOB

Para gerenciar um trabalho iniciado usando o parâmetro AsJob do cmdlet Invoke-Command, use os cmdlets do trabalho. Como o objeto de trabalho que representa o trabalho remoto está no computador local, você não precisa executar 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 trabalhos que foram 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 Estado do objeto de trabalho mostra 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 retornados automaticamente ao computador em que reside o objeto de trabalho, você pode obter 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 de sessão para identificar o trabalho. Este comando 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 MANTÉM OS RESULTADOS NO COMPUTADOR REMOTO

Para iniciar um trabalho em segundo plano em um computador remoto que mantém os resultados do comando no computador remoto, 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 no computador remoto. Da perspectiva do trabalho, todas as operações são locais. Você está apenas 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.

Este comando requer um 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 é considerado concluído quando o objeto de trabalho é retornado. Como resultado, a conexão temporária é fechada e o trabalho foi cancelado.

O comando a seguir usa o cmdlet New-PSSession para criar uma PSSession que está conectada ao computador Server01. O comando salva a PSSession na variável $s.

        $s = new-pssession -computername Server01

O próximo comando usa o cmdlet Invoke-Command para executar um comando Start-Job na PSSession. O comando Start-Job e o comando Get-Eventlog são colocados entre chaves.

       invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}}

Os resultados são semelhantes à seguinte saída de exemplo.

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

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

Observe que o valor da propriedade Local mostra que o trabalho foi executado no computador local, conhecido como "LocalHost", mesmo que o trabalho seja executado no computador Server01. Como o objeto de trabalho é criado no computador Server01 e o trabalho é 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 remoto, use os cmdlets de trabalho. Como o objeto de trabalho está no computador remoto, você precisa executar comandos remotos para obter, parar ou recuperar os resultados do trabalho.

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

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

O comando retorna um objeto de trabalho. A propriedade Estado do objeto de trabalho mostra que o comando foi concluído com êxito.

       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 que está conectada ao computador Server01.

O comando a seguir usa o cmdlet Receive-Job para obter os resultados do trabalho. Ele usa a ID de sessão para identificar o trabalho. Este comando 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 trabalhos 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 o 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

about_Remote_Variables

Invoke-Command

Start-Job

Get-Job

Wait-Job

Stop-Job

Remove-Job

New-PSSession

Enter-PSSession

Exit-PSSession