about_Remote_Output

Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

TEMA

about_Remote_Output

DESCRIPCIÓN BREVE

Describe cómo interpretar y dar formato a la salida de los comandos remotos.

DESCRIPCIÓN LARGA

La salida de un comando ejecutado en un equipo remoto podría parecerse a la salida del mismo comando ejecutado en un equipo local, pero hay algunas diferencias importantes.

En este tema se explica cómo interpretar, dar formato y mostrar la salida de los comandos que se ejecutan en equipos remotos.

MOSTRAR EL NOMBRE DEL EQUIPO

Al usar 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 de los comandos, la propiedad PSComputerName se muestra de forma predeterminada. Por ejemplo, el siguiente comando ejecuta un comando Get-Culture en dos equipos remotos, Server01 y Server02. La salida, que aparece a continuación, incluye el nombre de los equipos remotos en los que se ejecutó el comando.

        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

Puede usar el parámetro HideComputerName de Invoke-Command para ocultar la propiedad PSComputerName. Este parámetro está diseñado para los comandos que recopilan datos desde un único equipo remoto.

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

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

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

También puede mostrar la propiedad PSComputerName si no se muestra de forma predeterminada.

Por ejemplo, los siguientes comandos usan el cmdlet Format-Table para agregar la propiedad PSComputerName a la salida de un 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      

MOSTRAR LA PROPIEDAD MACHINENAME

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

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

Por ejemplo, este comando obtiene el proceso de PowerShell en los equipos remotos Server01 y Server02. La presentación predeterminada no incluye la propiedad 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

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

Por ejemplo, el siguiente comando guarda los procesos en la variable $p y usa un operador de canalización (|) para enviarlos al comando Format-Table. El comando usa el parámetro Property de Format-Table para incluir la propiedad MachineName en la presentación.

        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

El siguiente comando, que es más complejo, agrega la propiedad MachineName a la presentación predeterminada del proceso. Usa tablas hash para especificar las propiedades calculadas. Por suerte, no es necesario comprenderlo para poder usarlo

(tenga en cuenta que el acento grave [`] es el carácter de continuación).

        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 DESERIALIZADOS

Al ejecutar comandos remotos que generan una salida, esta se transmite a través de la red hasta llegar al equipo local.

Dado que la mayoría de los objetos activos de Microsoft .NET Framework (como los objetos que devuelven los cmdlets de Windows PowerShell) no se pueden transmitir a través de la red, se "serializan" los objetos activos. Dicho de otra forma, los objetos activos se convierten en representaciones XML del objeto y de 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, sino que es una instantánea del objeto en el momento que se serializó, e incluye propiedades pero no métodos. Puede usar y administrar estos objetos en Windows PowerShell (por ejemplo, pasarlos por las canalizaciones, mostrar las propiedades seleccionadas y darles formato).

Se da formato automáticamente a la mayoría de los objetos deserializados para mostrarlos por entradas en los archivos Types.ps1xml o Format.ps1xml. Sin embargo, es posible que el equipo local no tenga suficientes archivos de formato para todos los objetos deserializados que se generaron en un equipo remoto. Cuando no se da formato a los objetos, aparecen todas sus propiedades en la consola en una lista de transmisión por secuencias.

Cuando no se da formato a los objetos automáticamente, puede usar los cmdlets de formato (como Format-Table o Format-List) para dar formato y mostrar las propiedades seleccionadas. También puede usar el cmdlet Out-GridView para mostrar los objetos en una tabla.

Además, si ejecuta un comando en un equipo remoto que usa cmdlets que no tiene en su equipo local, es posible que no se aplique el formato correcto a los objetos que devuelve el comando porque no dispone en su equipo de los archivos de formato de dichos objetos. Para obtener datos de formato de otro equipo, use los cmdlets Get-FormatData y Export-FormatData.

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

ORDENACIÓN DE LOS RESULTADOS

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

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

VEA TAMBIÉN

about_Remote

about_Remote_Variables

Format-Table

Get-EventLog

Get-Process

Get-Service

Get-WmiObject

Invoke-Command

Out-GridView

Select-Object