Uso de comandos de formato para cambiar la vista de salida

PowerShell tiene un conjunto de cmdlets que permite controlar cómo se muestran las propiedades para determinados objetos. Los nombres de todos los cmdlets empiezan con el verbo Format. Permiten seleccionar las propiedades que se quieren mostrar.

Get-Command -Verb Format -Module Microsoft.PowerShell.Utility
CommandType     Name               Version    Source
-----------     ----               -------    ------
Cmdlet          Format-Custom      6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-Hex         6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-List        6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-Table       6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-Wide        6.1.0.0    Microsoft.PowerShell.Utility

En este artículo se describen los cmdlets Format-Wide, Format-List y Format-Table.

Cada tipo de objeto de PowerShell tiene propiedades predeterminadas que se usan si no se seleccionan las propiedades que se van a mostrar. Cada cmdlet usa el mismo parámetro Property para especificar las propiedades que se quieren mostrar. Como Format-Wide solo muestra una única propiedad, su parámetro Property solo toma un único valor, pero los parámetros de propiedad de Format-List y Format-Table aceptan una lista de nombres de propiedades.

En este ejemplo, la salida predeterminada del cmdlet Get-Process muestra que hay dos instancias de Internet Explorer en ejecución.

Get-Process -Name iexplore

El formato predeterminado de los objetos Process muestra estas propiedades:

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
     32    25.52      10.25      13.11   12808   1 iexplore
     52    11.46      26.46       3.55   21748   1 iexplore

Uso de Format-Wide para la salida de un solo elemento

De manera predeterminada, el cmdlet Format-Wide solo muestra la propiedad predeterminada de un objeto. La información asociada a cada objeto se muestra en una sola columna:

Get-Command -Verb Format | Format-Wide
Format-Custom          Format-Hex
Format-List            Format-Table
Format-Wide

También puede especificar una propiedad no predeterminada:

Get-Command -Verb Format | Format-Wide -Property Noun
Custom                 Hex
List                   Table
Wide

Control de la presentación de Format-Wide con columnas

Con el cmdlet Format-Wide, no se pueden varias propiedades a la vez. Esto resulta útil para mostrar listas grandes en varias columnas.

Get-Command -Verb Format | Format-Wide -Property Noun -Column 3
Custom                 Hex                  List
Table                  Wide

Uso de Format-List para obtener una vista de lista

El cmdlet Format-List muestra un objeto en forma de lista, donde cada propiedad aparece etiquetada en una línea distinta:

Get-Process -Name iexplore | Format-List
Id      : 12808
Handles : 578
CPU     : 13.140625
SI      : 1
Name    : iexplore

Id      : 21748
Handles : 641
CPU     : 3.59375
SI      : 1
Name    : iexplore

Puede especificar tantas propiedades como desee:

Get-Process -Name iexplore | Format-List -Property ProcessName,FileVersion,StartTime,Id
ProcessName : iexplore
FileVersion : 11.00.18362.1 (WinBuild.160101.0800)
StartTime   : 10/22/2019 11:23:58 AM
Id          : 12808

ProcessName : iexplore
FileVersion : 11.00.18362.1 (WinBuild.160101.0800)
StartTime   : 10/22/2019 11:23:57 AM
Id          : 21748

Obtención de información detallada mediante Format-List con caracteres comodín

El cmdlet Format-List permite usar un carácter comodín como valor de su parámetro Property. Esto le permite visualizar información detallada. A menudo, los objetos incluyen más información de la necesaria, por lo que PowerShell no muestra todos los valores de propiedad de forma predeterminada. Para mostrar todas las propiedades de un objeto, use el comando Format-List -Property *. El siguiente comando genera más de 60 líneas de salida para un único proceso:

Get-Process -Name iexplore | Format-List -Property *

Aunque el comando Format-List resulta útil para mostrar detalles, si quiere una visión general de la salida que incluya muchos elementos, una vista tabular más sencilla suele ser más conveniente.

Uso de Format-Table para la salida tabular

Si usa el cmdlet Format-Table sin nombres de propiedades especificados para dar formato a la salida del comando Get-Process, obtendrá exactamente la misma salida que sin un cmdlet Format. De forma predeterminada, PowerShell muestra los objetos Process en formato tabular.

Get-Service -Name win* | Format-Table
Status   Name               DisplayName
------   ----               -----------
Running  WinDefend          Windows Defender Antivirus Service
Running  WinHttpAutoProx... WinHTTP Web Proxy Auto-Discovery Se...
Running  Winmgmt            Windows Management Instrumentation
Running  WinRM              Windows Remote Management (WS-Manag...

Nota

Get-Service solo está disponible en plataformas Windows.

Mejora de la salida de Format-Table

Aunque una vista tabular resulta útil para mostrar mucha información, puede ser difícil de interpretar si la pantalla es demasiado estrecha para los datos. En el ejemplo anterior, el resultado se trunca. Si especifica el parámetro AutoSize al ejecutar el comando Format-Table, PowerShell calcula los anchos de columna en función de los datos reales que se muestran. Esto hace que las columnas sean legibles.

Get-Service -Name win* | Format-Table -AutoSize
Status  Name                DisplayName
------  ----                -----------
Running WinDefend           Windows Defender Antivirus Service
Running WinHttpAutoProxySvc WinHTTP Web Proxy Auto-Discovery Service
Running Winmgmt             Windows Management Instrumentation
Running WinRM               Windows Remote Management (WS-Management)

Es posible que el cmdlet Format-Table todavía trunque los datos, pero solo al final de la pantalla. Las propiedades distintas de la última que se muestra obtienen el tamaño que necesitan para que su elemento de datos más largo se muestre correctamente.

Get-Service -Name win* |
    Format-Table -Property Name, Status, StartType, DisplayName, DependentServices -AutoSize
Name                 Status StartType DisplayName                               DependentServi
                                                                                ces
----                 ------ --------- -----------                               --------------
WinDefend           Running Automatic Windows Defender Antivirus Service        {}
WinHttpAutoProxySvc Running    Manual WinHTTP Web Proxy Auto-Discovery Service  {NcaSvc, iphl…
Winmgmt             Running Automatic Windows Management Instrumentation        {vmms, TPHKLO…
WinRM               Running Automatic Windows Remote Management (WS-Management) {}

El comando Format-Table asume que las propiedades se enumeran por orden de importancia. El cmdlet intenta mostrar de forma completa las propiedades lo más cerca posible del principio. Si el comando Format-Table no puede mostrar todas las propiedades, quita algunas columnas de la pantalla. Puede ver este comportamiento en el ejemplo anterior de la propiedad DependentServices.

Encapsulado de la salida de Format-Table en columnas

Puede forzar que los datos de Format-Table largos se encapsulen dentro de la columna de presentación mediante el parámetro Wrap. Es posible que el parámetro Wrap no realice la acción prevista, ya que usa la configuración predeterminada si no se especifica también AutoSize:

Get-Service -Name win* |
    Format-Table -Property Name, Status, StartType, DisplayName, DependentServices -Wrap
Name                 Status StartType DisplayName                               DependentServi
                                                                                ces
----                 ------ --------- -----------                               --------------
WinDefend           Running Automatic Windows Defender Antivirus Service        {}
WinHttpAutoProxySvc Running    Manual WinHTTP Web Proxy Auto-Discovery Service  {NcaSvc,
                                                                                iphlpsvc}
Winmgmt             Running Automatic Windows Management Instrumentation        {vmms,
                                                                                TPHKLOAD,
                                                                                SUService,
                                                                                smstsmgr…}
WinRM               Running Automatic Windows Remote Management (WS-Management) {}

El uso del parámetro Wrap por sí solo no ralentiza en exceso el procesamiento. Sin embargo, el uso de AutoSize para dar formato a una lista de archivos recursiva de una estructura de directorios de gran tamaño puede tardar mucho tiempo y consumir una gran cantidad de memoria antes de que se muestren los primeros elementos de la salida.

Si no le preocupa la carga del sistema, AutoSize funciona bien con el parámetro Wrap. Las columnas iniciales siguen usando todo el ancho necesario para mostrar los elementos en una línea, pero la columna final se ajusta, si es necesario.

Nota

Es posible que algunas columnas no se muestren si se especifican primero las más anchas. Para obtener los mejores resultados, especifique primero los elementos de datos más pequeños.

En el ejemplo siguiente, primero se especifican las propiedades más anchas.

Get-Process -Name iexplore |
    Format-Table -Wrap -AutoSize -Property FileVersion, Path, Name, Id

Incluso con el ajuste, se omite la columna Id final:

FileVersion                          Path                                                  Nam
                                                                                           e
-----------                          ----                                                  ---
11.00.18362.1 (WinBuild.160101.0800) C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE iex
                                                                                           plo
                                                                                           re
11.00.18362.1 (WinBuild.160101.0800) C:\Program Files\Internet Explorer\iexplore.exe       iex
                                                                                           plo
                                                                                           re

Organización de la salida de la tabla

Otro parámetro útil para el control de la salida tabular es GroupBy. Las listas tabulares largas pueden ser especialmente difíciles de comparar. El parámetro GroupBy agrupa la salida según un valor de propiedad. Por ejemplo, los servicios se pueden agrupar por valor StartType para facilitar la inspección y omitir el valor StartType de la lista de propiedades:

Get-Service -Name win* | Sort-Object StartType | Format-Table -GroupBy StartType
   StartType: Automatic
Status   Name               DisplayName
------   ----               -----------
Running  WinDefend          Windows Defender Antivirus Service
Running  Winmgmt            Windows Management Instrumentation
Running  WinRM              Windows Remote Management (WS-Managem…

   StartType: Manual
Status   Name               DisplayName
------   ----               -----------
Running  WinHttpAutoProxyS… WinHTTP Web Proxy Auto-Discovery Serv…