TEMA
    about_Remote_Output

DESCRIPCIÓN BREVE
    Describe cómo interpretar y dar formato a los resultados de 
    comandos remotos.

DESCRIPCIÓN DETALLADA
    El resultado de un comando ejecutado en un equipo remoto podría 
    parecer similar al resultado del mismo comando ejecutado en un 
    equipo local, pero hay algunas diferencias significativas.

    En este tema se explica cómo interpretar, dar formato y mostrar 
    los resultados de los comandos ejecutados en equipos remotos.

                    
 MOSTRAR EL NOMBRE DEL EQUIPO

    Cuando se usa el cmdlet Invoke-Command para ejecutar un comando 
    en un equipo remoto, el comando devuelve un objeto que incluye el 
    nombre del equipo que generó los datos. El nombre del equipo 
    remoto se almacena en la propiedad PSComputerName.

    Para muchos comandos, la propiedad PSComputerName se muestra de 
    forma predeterminada. Por ejemplo, el comando siguiente ejecuta 
    un comando Get-Culture en dos equipos remotos, Servidor01 y 
    Servidor02. El resultado, que aparece a continuación, incluye los 
    nombres de los equipos remotos en los que se ejecutó el comando.

        C:\PS> invoke-command -script {get-culture} -comp Servidor01, Servidor02

        LCID  Name    DisplayName                PSComputerName
        ----  ----    -----------                --------------
        1033  en-US   Inglés (Estados Unidos)    Server01
        1033  es-AR   Español (Argentina)        Server02

    
    Puede utilizar el parámetro HideComputerName de Invoke-Command 
    para ocultar la propiedad PSComputerName. Este parámetro se ha 
    diseñado para los comandos que recopilan datos de solo un equipo 
    remoto.

    El comando siguiente ejecuta un comando Get-Culture en el equipo 
    remoto Servidor01. Utiliza el parámetro HideComputerName para 
    ocultar la propiedad PSComputerName y las propiedades relacionadas.


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

        LCID             Name             DisplayName
        ----             ----             -----------
        1033             en-US            Inglés (Estados Unidos)




     Asimismo, puede mostrar la propiedad PSComputerName si no 
     aparece de forma predeterminada. 

     Por ejemplo, los comandos siguientes utilizan el cmdlet 
     Format-Table para agregar la propiedad PSComputerName al 
     resultado de un comando Get-Date remoto.

        C:\PS> $dates = invoke-command -script {get-date} -computername Servidor01, Servidor02
        C:\PS> $dates | format-table DateTime, PSComputerName -auto

        DateTime                               PSComputerName
        --------                               --------------
        Lunes, 21 de julio de 2008 19:16:58    Servidor01
        Lunes, 21 de julio de 2008 19:16:58    Servidor02      



 MOSTRAR LA PROPIEDAD MACHINENAME

    Varios cmdlets, como Get-Process, Get-Service y Get-EventLog, 
    tienen un parámetro ComputerName que obtiene los objetos de un 
    equipo remoto.
    Estos cmdlets no utilizan la comunicación remota de Windows 
    PowerShell, por lo que puede usarlos en los equipos que no estén 
    configurados para la comunicación remota de Windows PowerShell.

    Los objetos que estos cmdlets devuelven almacenan el nombre del 
    equipo remoto en la propiedad MachineName. (Estos objetos no 
    tienen la propiedad PSComputerName.)

    Por ejemplo, este comando obtiene el proceso de PowerShell en los 
    equipos remotos Servidor01 y Servidor02. De forma predeterminada, 
    no se muestra la propiedad MachineName. 

        C:\PS> get-process powershell -computername servidor01, servidor02


        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


    Puede utilizar el cmdlet Format-Table para mostrar la propiedad 
    MachineName de los objetos de proceso. 

    Por ejemplo, el comando siguiente guarda los procesos en la 
    variable $p y, a continuación, utiliza un operador de 
    canalización (|) para enviar los procesos guardados en $p al 
    comando Format-Table. El comando utiliza el parámetro Property de 
    Format-Table para que se muestre la propiedad MachineName.


        C:\PS> $p = get-process powershell -comp Servidor01, Servidor02
        C:\PS> $P | format-table -property ID, ProcessName, MachineName -auto


        Id   ProcessName MachineName
        --   ----------- -----------
        2648 powershell  Servidor02
        3020 powershell  Servidor01
        4796 powershell  Servidor02

    
    El siguiente comando, que es más complejo, agrega la propiedad 
    MachineName a la presentación predeterminada de los procesos. 
    Utiliza tablas hash para especificar las propiedades calculadas. 
    Afortunadamente, no es preciso que lo entienda para poder usarlo. 
    (Observe que el carácter de acento grave [`] es el carácter de 
    continuación.)

      
        C:\PS> $p = get-process powershell -comp Servidor01, Servidor02

        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  Servidor02   
            192      6 24132  32028   140        3020 powershell  Servidor01  
            438     26 48436  59132   565        4796 powershell  Servidor02  

 OBJETOS DESERIALIZADOS
    Cuando se ejecutan comandos remotos que generan resultados, 
    dichos resultados se transmiten al equipo local a través de la red. 

    Dado que la mayoría de los objetos activos de Microsoft .NET 
    Framework (como los objetos devueltos por los cmdlets de Windows 
    PowerShell) no se pueden transmitir a través de la red, se 
    "serializan" dichos objetos. En otras palabras, los objetos 
    activos se convierten en representaciones XML del objeto y sus 
    propiedades. A continuación, el objeto serializado basado en XML 
    se transmite a través de la red. 

    En el equipo local, Windows PowerShell recibe el objeto 
    serializado basado en XML y lo "deserializa" convirtiéndolo en un 
    objeto estándar de .NET Framework.

    Sin embargo, el objeto deserializado no es un objeto activo. Es 
    una instantánea del objeto en el momento en que se serializó e 
    incluye propiedades pero no incluye ningún método. Puede utilizar 
    y administrar estos objetos en Windows PowerShell, incluso puede 
    pasarlos a través de canalizaciones, mostrar determinadas 
    propiedades y darles formato.

    A la mayoría de los objetos deserializados se les aplica 
    automáticamente formato mediante entradas de los archivos 
    Types.ps1xml o Format.ps1xml. Sin embargo, puede que el equipo 
    local no tenga archivos de formato para todos los objetos 
    deserializados generados en un equipo remoto. Cuando no se da 
    formato a los objetos, todas las propiedades de cada objeto 
    aparecen en la consola como una lista continua. 

    Cuando no se da formato automáticamente a los objetos, puede 
    utilizar los cmdlets de formato, como Format-Table o Format-List, 
    para dar formato y mostrar determinadas propiedades. O bien, 
    puede usar el cmdlet Out-GridView para mostrar los objetos en una 
    tabla.

    Asimismo, si ejecuta un comando en un equipo remoto que utiliza 
    cmdlets que no existen en el equipo local, puede que no se 
    aplique un formato correcto a los objetos devueltos por el 
    comando dado que su equipo no dispone de los archivos de formato 
    para esos objetos. Para obtener datos de formato de otro equipo, 
    utilice los cmdlets Get-FormatData y Export-FormatData. 

    Algunos tipos de objeto, como objetos DirectoryInfo y GUID, se 
    convierten de nuevo en objetos activos en el momento de 
    recibirlos. Estos objetos no necesitan ningún tratamiento o 
    formato especial.  



 ORDENAR LOS RESULTADOS
    El orden de los nombres de equipo en el parámetro ComputerName de 
    los cmdlets determina el orden en que Windows PowerShell se 
    conecta a los equipos remotos. Sin embargo, los resultados 
    aparecen en el orden en que el equipo local los recibe, el cual 
    podría ser diferente.

    Para cambiar el orden de los resultados, utilice el cmdlet 
    Sort-Object. Puede ordenar por la propiedad PSComputerName o 
    MachineName. También puede ordenar por otra propiedad del objeto 
    de modo que se intercalen los resultados de los diferentes equipos.



VEA TAMBIÉN
    about_Remote
    Format-Table
    Get-EventLog
    Get-Process
    Get-Service
    Get-WmiObject
    Invoke-Command
    Out-GridView
    Select-Object




Tabla de contenido