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