Windows PowerShell incluye un conjunto de cmdlets que permiten controlar qué propiedades se muestran de objetos específicos. Los nombres de todos los cmdlets comienzan por el verbo Format. Permiten seleccionar una o más propiedades para mostrarlas.
Los cmdlets Format son Format-Wide, Format-List, Format-Table y Format-Custom. Solo describiremos los cmdlets Format-Wide, Format-List y Format-Table en este manual del usuario.
Cada cmdlet de formato tiene propiedades predeterminadas que se utilizarán si el usuario no especifica las propiedades concretas que desea que se muestren. También se usa en cada cmdlet el mismo nombre de parámetro, Property, para especificar las propiedades que se desea mostrar. Dado que Format-Wide sólo muestra una propiedad, su parámetro Property toma sólo un valor, pero los parámetros de propiedad de Format-List y Format-Table aceptan una lista de nombres de propiedades.
Si usa el comando Get-Process -Name powershell con dos instancias de Windows PowerShell en ejecución, obtendrá un resultado similar al siguiente:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 995 9 30308 27996 152 2.73 2760 powershell 331 9 23284 29084 143 1.06 3448 powershell
En el resto de esta sección, exploraremos la forma de utilizar los cmdlets Format para cambiar la forma de mostrarse el resultado de este comando.
Utilizar Format-Wide para resultados con un único elemento
De forma predeterminada, el cmdlet Format-Wide muestra sólo la propiedad predeterminada de un objeto. La información asociada a cada objeto se muestra en una sola columna:
PS> Get-Process -Name powershell | Format-Wide powershell powershell
También puede especificar una propiedad que no sea predeterminada:
PS> Get-Process -Name powershell | Format-Wide -Property Id 2760 3448
Controlar la presentación con columnas de Format-Wide
Con el cmdlet Format-Wide, puede mostrar una sola propiedad cada vez. Esto resulta útil para mostrar listas sencillas que muestren sólo un elemento por línea. Para obtener una lista sencilla, establezca el valor del parámetro Column en 1; para ello, escriba:
Get-Command Format-Wide -Property Name -Column 1
Usar Format-List para una vista de lista
El cmdlet Format-List muestra un objeto en forma de lista, con cada propiedad etiquetada y mostrada en una línea independiente:
PS> Get-Process -Name powershell | Format-List Id : 2760 Handles : 1242 CPU : 3.03125 Name : powershell Id : 3448 Handles : 328 CPU : 1.0625 Name : powershell
Puede especificar tantas propiedades como desee:
PS> Get-Process -Name powershell | Format-List -Property ProcessName,FileVersion ,StartTime,Id ProcessName : powershell FileVersion : 1.0.9567.1 StartTime : 2006-05-24 13:42:00 Id : 2760 ProcessName : powershell FileVersion : 1.0.9567.1 StartTime : 2006-05-24 13:54:28 Id : 3448
Obtener información detallada utilizando Format-List con caracteres comodín
El cmdlet Format-List permite utilizar un carácter comodín como valor del parámetro Property correspondiente. De esta manera se puede mostrar información detallada. A menudo, los objetos contienen más información de la necesaria, que es el motivo por el que Windows PowerShell no muestra todos los valores de propiedades de manera predeterminada. Para que se muestren todas las propiedades de un objeto, utilice el comando Format-List -Property *. El siguiente comando genera más de 60 líneas de resultados de un solo proceso:
Get-Process -Name powershell | Format-List -Property *
Aunque el comando Format-List es útil para mostrar información detallada, si desea obtener información general de resultados que contienen muchos elementos, una vista de tabla más sencilla suele ser más conveniente.
Utilizar Format-Table para mostrar resultados con formato de tabla
Si usa el cmdlet Format-Table sin especificar nombres de propiedades para dar formato al resultado del comando Get-Process, obtendrá exactamente el mismo resultado que si no aplica ningún formato. El motivo es que los procesos se muestran normalmente en formato de tabla, como la mayoría de los objetos de Windows PowerShell.
PS> Get-Process -Name powershell | Format-Table Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1488 9 31568 29460 152 3.53 2760 powershell 332 9 23140 632 141 1.06 3448 powershell
Mejorar el resultado obtenido con Format-Table (AutoSize)
Aunque la vista de tabla resulta útil para mostrar mucha información comparable, puede ser difícil de interpretar si la presentación es demasiado estrecha para los datos. Por ejemplo, si intenta mostrar la ruta de acceso del proceso, el Id., el nombre y la compañía, las columnas de ruta de acceso del proceso y de compañía aparecerán truncadas:
PS> Get-Process -Name powershell | Format-Table -Property Path,Name,Id,Company Path Name Id Company ---- ---- -- ------- C:\Program Files... powershell 2836 Microsoft Corpor...
Si especifica el parámetro AutoSize al ejecutar el comando Format-Table, Windows PowerShell calculará los anchos de columna en función de los datos reales que se desea mostrar. De esta manera podrá leerse la columna Path, pero los valores de la columna Company seguirán mostrándose truncados:
PS> Get-Process -Name powershell | Format-Table -Property Path,Name,Id,Company - AutoSize Path Name Id Company ---- ---- -- ------- C:\Program Files\Windows PowerShell\v1.0\powershell.exe powershell 2836 Micr...
El cmdlet Format-Table puede seguir truncando los datos, pero sólo al final de la pantalla. Se proporciona a las propiedades (salvo a la última mostrada) el espacio necesario para que el elemento de datos más largo se muestre correctamente. Si se intercambian las ubicaciones de Path y Company en la lista de valores de Property, se mostrará el nombre de la compañía, pero la ruta de acceso aparecerá truncada:
PS> Get-Process -Name powershell | Format-Table -Property Company,Name,Id,Path - AutoSize Company Name Id Path ------- ---- -- ---- Microsoft Corporation powershell 2836 C:\Program Files\Windows PowerShell\v1...
El comando Format-Table supone que cuanto más próxima está una propiedad del principio de la lista de propiedades, más importante es. Por tanto, intenta mostrar en su totalidad las propiedades que estén más cerca del principio. Si el comando Format-Table no puede mostrar todas las propiedades, quitará algunas columnas de la presentación y mostrará una advertencia. Puede observar este comportamiento si establece Name como la última propiedad de la lista:
PS> Get-Process -Name powershell | Format-Table -Property Company,Path,Id,Name - AutoSize WARNING: column "Name" does not fit into the display and was removed. Company Path I d ------- ---- - Microsoft Corporation C:\Program Files\Windows PowerShell\v1.0\powershell.exe 6
En el resultado anterior, la columna de Id. se muestra truncada, de forma que quepa en la lista, y los encabezados de columna se muestran apilados. El ajuste automático del tamaño de las columnas no siempre proporciona los resultados deseados.
Ajustar en columnas el resultado obtenido con Format-Table (Wrap)
Puede forzar que los datos largos de Format-Table se ajusten a su columna correspondiente usando el parámetro Wrap. Es posible que los resultados no sean los esperados si se utiliza únicamente el parámetro Wrap, ya que este aplica valores predeterminados si no se especifica también AutoSize:
PS> Get-Process -Name powershell | Format-Table -Wrap -Property Name,Id,Company, Path Name Id Company Path ---- -- ------- ---- powershell 2836 Microsoft Corporati C:\Program Files\Wi on ndows PowerShell\v1 .0\powershell.exe
Una ventaja de usar el parámetro Wrap solo es que no ralentiza demasiado el procesamiento. Si usa AutoSize y crea una lista recursiva de archivos de un gran sistema de directorios, es posible que este proceso tarde mucho tiempo en completarse y consuma gran cantidad de memoria antes de que se muestren los primeros elementos de salida.
Si la carga del sistema no es un problema, entonces AutoSize funciona bien con el parámetro Wrap. A las columnas iniciales se les asigna siempre el ancho necesario para mostrar los elementos en una línea, como cuando se especifica AutoSize sin el parámetro Wrap. La única diferencia es que se ajusta la última columna, si es necesario:
PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Name,I d,Company,Path Name Id Company Path ---- -- ------- ---- powershell 2836 Microsoft Corporation C:\Program Files\Windows PowerShell\v1.0\ powershell.exe
Es posible que algunas columnas no se muestren si se especifican primero las columnas más anchas, por lo que lo más seguro es especificar primero los elementos de datos más cortos. En el ejemplo siguiente se ha especificado primero el elemento de ruta de acceso, que es bastante ancho, por lo que se pierde la última columna Name aunque se aplique el ajuste de línea:
PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Path,I d,Company,Name WARNING: column "Name" does not fit into the display and was removed. Path Id Company ---- -- ------- C:\Program Files\Windows PowerShell\v1.0\powershell.exe 2836 Microsoft Corporat ion
Organizar los resultados con formato de tabla (-GroupBy)
Otro parámetro útil para el control de los resultados con formato de tabla es GroupBy. Las listas largas con formato de tabla pueden ser difíciles de comparar. El parámetro GroupBy.agrupa el resultado en función del valor de una propiedad. Por ejemplo, podemos agrupar los procesos por compañía para facilitar la inspección, omitiendo el valor de compañía de la lista de propiedades:
PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Name,I d,Path -GroupBy Company Company: Microsoft Corporation Name Id Path ---- -- ---- powershell 1956 C:\Program Files\Windows PowerShell\v1.0\powershell.exe powershell 2656 C:\Program Files\Windows PowerShell\v1.0\powershell.exe