TÓPICO
    about_Remote_Output

DESCRIÇÃO RESUMIDA
    Descreve como interpretar e formatar a saída dos comandos remotos.

DESCRIÇÃO LONGA
    A saída de um comando que foi executado em um computador remoto 
    possivelmente se assemelhará à saída do mesmo comando executado 
    em um computador local, mas com algumas diferenças.

    Este tópico explica como interpretar, formatar e exibir a saída 
    dos comandos executados nos computadores remotos.

                    
 EXIBINDO O NOME DO COMPUTADOR

    Quando você usar o cmdlet Invoke-Command para executar um comando 
    em um computador remoto, o comando retornará um objeto que inclui 
    o nome do computador que gerou os dados. O 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 
    aparece abaixo, inclui os nomes dos computadores remotos em que 
    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 apenas de 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 as propriedades relacionadas.


        C:\PS> invoke-command -scr {get-culture} -comp Server01 -HideComputerName        

        LCID             Name             DisplayName
        ----             ----             -----------
        1033             en-US            English (United States)



     Você também poderá 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 à 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
        --------                                       --------------
        Segunda-feira, 21 de julho de 2008 19:16:58    Server01
        Segunda-feira, 21 de julho de 2008 19:16:58    Server02      


 EXIBINDO A PROPRIEDADE MACHINENAME

    Vários cmdlets, incluindo Get-Process, Get-Service e Get-EventLog, 
    têm um parâmetro ComputerName que permite a obtenção de objetos em 
    um computador remoto. Esses cmdlets 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 
    no Windows PowerShell.    

    Os objetos retornados por esses cmdlets 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 usa um operador de pipeline (|) para enviar os processos de $p 
    ao 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 comando mais complexo seguinte adiciona a propriedade 
    MachineName à exibição padrão do processo. Usa tabelas de hash 
    para especificar as propriedades calculadas. Felizmente, você não 
    precisa entendê-las para utilizá-las. 
    (Observe que a crase (`) é 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 será transmitida pela rede ao computador local. 

    Como a maioria dos objetos ao vivo do Microsoft .NET Framework 
    (como os objetos retornados pelos cmdlets do Windows PowerShell) 
    não pode ser transmitida pela rede, os objetos ao vivo são 
    "serializados". Em outras palavras, os objetos ao vivo são 
    convertidos em representações XML do objeto e de suas respectivas 
    propriedades. Em seguida, o objeto serializado baseado em XML 
    será transmitido pela rede. 

    No computador local, o Windows PowerShell recebe o objeto 
    serializado baseado em XML e "desserializa-o", convertendo-o em 
    um objeto de .NET Framework padrão.

    No entanto, o objeto desserializado não é um objeto ao vivo. É um 
    instantâneo do objeto no momento em que ele foi serializado, que 
    inclui propriedades mas nenhum método. Você pode usar e gerenciar 
    esses objetos no Windows PowerShell, inclusive transmiti-los em 
    pipelines, exibir as propriedades selecionadas e formatá-los.

    A maioria dos objetos desserializados é formatada automaticamente 
    para ser exibida por entradas nos arquivos Types.ps1xml ou 
    Format.ps1xml. No entanto, o computador local possivelmente não 
    terá arquivos de formatação para todos os objetos desserializados 
    gerados em um computador remoto. Quando os objetos não são 
    formatados, todas as propriedades de cada objeto aparecem no 
    console em uma lista contínua. 

    Quando os objetos não forem formatados automaticamente, você 
    poderá usar os cmdlets de formatação, como Format-Table ou 
    Format-List, para formatar e exibir as propriedades selecionadas. 
    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 use cmdlets que você não tenha em seu computador local, os 
    objetos retornados pelo comando possivelmente não serão 
    formatados corretamente porque você não tem os arquivos de 
    formatação desses 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 DirectoryInfo e GUIDs, são 
    convertidos novamente em objetos ao vivo quando são recebidos. 
    Esses objetos não precisam de nenhum tratamento ou formatação 
    especial.  



 ORDENANDO OS RESULTADOS
    A ordem dos nomes de computador no parâmetro ComputerName dos 
    cmdlets determina a ordem em que o Windows PowerShell se conecta 
    aos 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 fazer a classificação com base na propriedade 
    PSComputerName ou MachineName. Você também fazê-la com base em 
    outra propriedade do objeto, para que os resultados de 
    computadores diferentes sejam intercalados.



CONSULTE TAMBÉM
    about_Remote 
    Format-Table 
    Get-EventLog 
    Get-Process 
    Get-Service      
    Get-WmiObject     
    Invoke-Command
    Out-GridView
    Select-Object




Sumário