about_Remote_Output
Aplica-se a: Windows PowerShell 2.0, Windows PowerShell 3.0
TÓPICO
about_Remote_Output
DESCRIÇÃO BREVE
Descreve como interpretar e formatar a saída de comandos remotos.
DESCRIÇÃO LONGA
A saída de um comando que foi executado em um computador remoto pode parecer com a saída do mesmo comando executado em um computador local, mas há algumas diferenças significativas.
Este tópico explica como interpretar, formatar e exibir a saída de comandos que são executados em computadores remotos.
EXIBINDO O NOME DO COMPUTADOR
Quando você usa o cmdlet Invoke-Command para executar um comando em um computador remoto, o comando retorna um objeto que inclui o nome do computador que gerou os dados. O nome do computador remoto é armazenado na propriedade PSComputerName.
Para muitos comandos, o PSComputerName é exibido por padrão. Por exemplo, o comando a seguir executa um comando Get-Culture em dois computadores remotos, Server01 e Server02. A saída, que é exibida abaixo, inclui os nomes dos computadores remotos nos quais o comando foi executado.
C:\PS> invoke-command -script {get-culture} -comp Server01, Server02
LCID Name DisplayName PSComputerName
---- ---- ----------- --------------
1033 en-US English (United States) Server01
1033 es-AR Spanish (Argentina) Server02
Você pode usar o parâmetro HideComputerName de Invoke-Command para ocultar a propriedade PSComputerName. Esse parâmetro foi projetado para comandos que coletam dados de apenas um computador remoto.
O comando a seguir executa um comando Get-Culture no computador remoto Server01. Ele usa o parâmetro HideComputerName para ocultar a propriedade PSComputerName e propriedades relacionadas.
C:\PS> invoke-command -scr {get-culture} -comp Server01 -HideComputerName
LCID Name DisplayName
---- ---- -----------
1033 en-US English (United States)
Você também pode exibir a propriedade PSComputerName se ela não for exibida por padrão.
Por exemplo, os comandos a seguir usam o cmdlet Format-Table para adicionar a propriedade PSComputerName na saída de um comando Get-Date remoto.
C:\PS> $dates = invoke-command -script {get-date} -computername Server01, Server02
C:\PS> $dates | format-table DateTime, PSComputerName -auto
DateTime PSComputerName
-------- --------------
Monday, July 21, 2008 7:16:58 PM Server01
Monday, July 21, 2008 7:16:58 PM Server02
EXIBINDO A PROPRIEDADE MACHINENAME
Vários cmdlets, incluindo Get-Process, Get-Service e Get-EventLog têm um parâmetro ComputerName que obtém os objetos em um computador remoto. Esses cmdlets não usam o Windows PowerShell® com comunicação remota, então você pode usá-los mesmo em computadores que não estão configurados para comunicação remota em Windows PowerShell.
Os objetos que esses cmdlets retornam armazenam o nome do computador remoto na propriedade MachineName. (Esses objetos não têm uma propriedade PSComputerName.)
Por exemplo, esse comando obtém o processo do PowerShell nos computadores remotos Server01 e Server02. A exibição padrão não inclui a propriedade MachineName.
C:\PS> get-process PowerShell -computername server01, server02
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
920 38 97524 114504 575 9.66 2648 PowerShell
194 6 24256 32384 142 3020 PowerShell
352 27 63472 63520 577 3.84 4796 PowerShell
Você pode usar o cmdlet Format-Table para exibir a propriedade MachineName dos objetos de processo.
Por exemplo, o comando a seguir salva os processos na variável $p e, em seguida, usa um operador de pipeline (|) para enviar os processos em $p para o comando Format-Table. O comando usa o parâmetro Property de Format-Table para incluir a propriedade MachineName na exibição.
C:\PS> $p = get-process PowerShell -comp Server01, Server02
C:\PS> $P | format-table -property ID, ProcessName, MachineName -auto
Id ProcessName MachineName
-- ----------- -----------
2648 PowerShell Server02
3020 PowerShell Server01
4796 PowerShell Server02
O seguinte comando mais complexo adiciona a propriedade MachineName para a exibição de processo padrão. Ele usa tabelas de hash para especificar propriedades calculadas. Felizmente, você não precisa entender isso para usá-lo.
(Observe que o acento grave [`] é o caractere de continuação.)
C:\PS> $p = get-process PowerShell -comp Server01, Server02
C:\PS> $p | format-table -property Handles, `
@{Label="NPM(K)";Expression={[int]($_.NPM/1024)}}, `
@{Label="PM(K)";Expression={[int]($_.PM/1024)}}, `
@{Label="WS(K)";Expression={[int]($_.WS/1024)}}, `
@{Label="VM(M)";Expression={[int]($_.VM/1MB)}}, `
@{Label="CPU(s)";Expression={if ($_.CPU -ne $()){ $_.CPU.ToString("N")}}}, `
Id, ProcessName, MachineName -auto
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName MachineName
------- ------ ----- ----- ----- ------ -- ----------- -----------
920 38 97560 114532 576 2648 PowerShell Server02
192 6 24132 32028 140 3020 PowerShell Server01
438 26 48436 59132 565 4796 PowerShell Server02
OBJETOS DESSERIALIZADOS
Quando você executar comandos remotos que geram saída, a saída do comando é transmitida pela rede para o computador local.
Como a maioria dos objetos dinâmicos do Microsoft .NET Framework (como os objetos que os cmdlets Windows PowerShell retornam) não pode ser transmitida pela rede, os objetos dinâmicos são "serializados". Em outras palavras, os objetos dinâmicos são convertidos em representações de XML do objeto e suas propriedades. Em seguida, o objeto serializado com base em XML é transmitido pela rede.
No computador local, Windows PowerShell recebe o objeto serializado com base em XML e o "desserializa" convertendo o objeto baseado em XML em um objeto padrão do .NET Framework.
No entanto, o objeto desserializado não é um objeto dinâmico. Ele é um instantâneo do objeto no momento em que ele foi serializado, e inclui propriedades, mas não métodos. Você pode usar e gerenciar esses objetos em Windows PowerShell, inclusive transmiti-los em pipelines, exibindo as propriedades selecionadas e formatá-los.
A maioria dos objetos desserializados é automaticamente formatada para exibição por entradas nos arquivos Types.ps1xml ou Format.ps1xml. No entanto, o computador local pode não arquivos formatados para todos os objetos desserializados que foram gerados em um computador remoto. Quando os objetos não forem formatados, todas as propriedades de cada objeto são exibidas no console em uma lista de streaming.
Quando objetos não são formatados automaticamente, você pode usar os cmdlets de formatação, como Format-Table ou Format-List para formatar e exibir propriedades selecionadas. Ou, você pode usar o cmdlet Out-GridView para exibir os objetos em uma tabela.
Além disso, se você executar um comando em um computador remoto que usa cmdlets que você não tem no seu computador local, os objetos que o comando retorna poderão não ser formatados corretamente porque você não tem os arquivos de formatação para os objetos em seu computador. Para obter dados de formatação de outro computador, use os cmdlets Get-FormatData e Export-FormatData.
Alguns tipos de objeto, como objetos DirectoryInfo e GUIDs, são convertidos novamente em objetos dinâmicos quando recebidos. Esses objetos não precisam de manipulação ou formatação especiais.
ORDENANDO RESULTADOS
A ordem dos nomes de computador no parâmetro ComputerName dos cmdlets determina a ordem na qual o Windows PowerShell se conecta a computadores remotos. No entanto, os resultados aparecem na ordem em que o computador local os recebe, que pode ser uma ordem diferente.
Para alterar a ordem dos resultados, use o cmdlet Sort-Object. Você pode classificar a propriedade PSComputerName ou MachineName. Você também pode classificar em outra propriedade do objeto para que os resultados de diferentes computadores sejam intercalados.
CONSULTE TAMBÉM
about_Remote
about_Remote_Variables
Format-Table
Get-EventLog
Get-Process
Get-Service
Get-WmiObject
Invoke-Command
Out-GridView
Select-Object