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