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 que se ejecutó en un equipo remoto podría ser similar a la salida 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 la salida de los comandos que se ejecutan en equipos remotos.
Mostrar el nombre del equipo
Cuando se usa el Invoke-Command
cmdlet para ejecutar un comando en un equipo remoto, el comando devuelve un objeto que incluye el nombre del equipo que generó los datos. La propiedad PSComputerName contiene el nombre del equipo remoto.
Para muchos comandos, PSComputerName se muestra de forma predeterminada. Por ejemplo, el siguiente comando ejecuta un Get-Culture
comando en dos equipos remotos, Server01 y Server02. La salida, que aparece a continuación, incluye los nombres de los equipos remotos en los que se ejecutó el comando.
Invoke-Command -ScriptBlock {Get-Culture} -ComputerName 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 comandos que recopilan datos de un solo equipo remoto.
El comando siguiente ejecuta un Get-Culture
comando en el equipo remoto Server01. Usa el parámetro HideComputerName para ocultar la propiedad PSComputerName y las propiedades relacionadas.
$invokeCommandSplat = @{
ScriptBlock = {Get-Culture}
ComputerName = 'Server01'
HideComputerName = $true
}
Invoke-Command @invokeCommandSplat
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 Format-Table
cmdlet para agregar la propiedad PSComputerName a la salida de un comando remoto Get-Date
.
$invokeCommandSplat = @{
ScriptBlock = {Get-Date}
ComputerName = 'Server01', 'Server02'
}
Invoke-Command @invokeCommandSplat |
Format-Table DateTime, PSComputerName -AutoSize
DateTime PSComputerName
-------- --------------
Monday, July 21, 2008 7:16:58 PM Server01
Monday, July 21, 2008 7:16:58 PM Server02
Objetos deserializados
Al ejecutar comandos remotos que generan la salida, la salida del comando se transmite a través de la red al equipo local.
Dado que los objetos .NET dinámicos no se pueden transmitir a través de la red, los objetos dinámicos se serializan o convierten en representaciones XML del objeto y sus propiedades. PowerShell transmite el objeto serializado a través de la red.
En el equipo local, PowerShell recibe el objeto serializado y lo deserializa convirtiendo el objeto serializado en un objeto .NET estándar.
Sin embargo, el objeto deserializado no es un objeto activo. Es una instantánea del objeto en el momento de la serialización. El objeto deserializado incluye propiedades, pero no métodos. Puede usar y administrar estos objetos en PowerShell, incluidos pasarlos en canalizaciones, mostrar las propiedades seleccionadas y aplicarles formato.
La mayoría de los objetos deserializados tienen formato automático para mostrarlos mediante entradas en los Types.ps1xml
archivos o Format.ps1xml
. Sin embargo, es posible que el equipo local no tenga archivos de formato para todos los objetos que se generaron en un equipo remoto. Cuando los objetos no tienen formato, todas las propiedades de cada objeto aparecen en la consola de una lista de streaming.
Cuando los objetos no tienen formato automático, puede usar los cmdlets de formato, como Format-Table
o Format-List
, para dar formato a las propiedades seleccionadas y mostrarlas. O bien, puede usar el Out-GridView
cmdlet para mostrar los objetos en una tabla.
Cuando ejecuta un comando en un equipo remoto que usa cmdlets que no tiene en el equipo local, es posible que los objetos que devuelve el comando no tengan el formato esperado si no tiene los archivos de formato para esos tipos de objetos en el equipo. Use los Get-FormatData
cmdlets y Export-FormatData
para obtener datos de formato de otro equipo.
Algunos tipos de objetos, como objetos DirectoryInfo y GUID, se convierten de nuevo en objetos activos cuando se reciben. Estos objetos no necesitan ningún control ni formato especiales.
Ordenar los resultados
El orden de los nombres de equipo en el parámetro ComputerName de cmdlets determina el orden en el que PowerShell se conecta a los equipos remotos. Sin embargo, los resultados aparecen en el orden en que se reciben los datos de los equipos remotos.
Puede usar el Sort-Object
cmdlet para ordenar los resultados en PSComputerName. Cuando se realiza cualquier otra propiedad del objeto, los resultados de diferentes equipos se intercalan entrelazados en la salida.