Usar comandos Format para alterar a exibição dos resultados

O PowerShell tem um conjunto de cmdlets que permite controlar como as propriedades são exibidas para objetos específicos. Os nomes de todos os cmdlets começam com o verbo Format. Eles permitem que você selecione quais propriedades deseja 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

Este artigo descreve os cmdlets Format-Wide, Format-List e Format-Table.

Cada tipo de objeto no PowerShell tem propriedades padrão que são usadas quando você não seleciona quais propriedades devem ser exibidas. Cada cmdlet usa o mesmo parâmetro Property para especificar quais propriedades você deseja exibir. Como Format-Wide mostra uma única propriedade, seu parâmetro Property tem apenas um único valor, mas os parâmetros de propriedade de Format-List e Format-Table aceitam uma lista de nomes de propriedade.

Neste exemplo, a saída padrão do cmdlet Get-Process mostra que há duas instâncias do Internet Explorer em execução.

Get-Process -Name iexplore

O formato padrão para objetos Process exibe as propriedades mostradas aqui:

 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

Usar Format-Wide para saída de um único item

O cmdlet Format-Wide, por padrão, exibe apenas a propriedade padrão de um objeto. As informações associadas a cada objeto são exibidas em uma única coluna:

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

Você também pode especificar uma propriedade não padrão:

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

Controlar a exibição Format-Wide com coluna

Com o cmdlet Format-Wide, só é possível exibir uma única propriedade de cada vez. Isso o torna útil para exibir listas grandes em várias colunas.

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

Usar Format-List para uma exibição de lista

O cmdlet Format-List exibe um objeto em forma de uma listagem, com cada propriedade rotulada e exibida em uma linha separada:

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

Você pode especificar quantas propriedades quiser:

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

Obter informações detalhadas usando Format-List com curingas

O cmdlet Format-List permite usar um caractere curinga como o valor do parâmetro Property. Isso permite exibir informações detalhadas. Geralmente, os objetos incluem mais informações do que você precisa, por isso, o PowerShell não mostra todos os valores de propriedade por padrão. Para mostrar todas as propriedades de um objeto, use o comando Format-List -Property *. O seguinte comando gera mais de 60 linhas de saída para um único processo:

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

Embora o comando Format-List seja útil para mostrar os detalhes, se você quiser obter uma visão geral de saída que inclui vários itens, uma exibição de tabela simples geralmente será mais útil.

Usar Format-Table para saída em tabela

Caso você use o cmdlet Format-Table sem nenhum nome de propriedade especificado para formatar a saída do comando Get-Process, obterá exatamente a mesma saída que receberia sem um cmdlet Format. Por padrão, o PowerShell exibe objetos Process em um 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...

Observação

Get-Service está disponível apenas em plataformas Windows.

Melhorar a saída do Format-Table

Embora uma exibição tabular seja útil para exibir muitas informações, ela poderá ser difícil de interpretar se a exibição for muito estreita para os dados. No exemplo anterior, a saída está truncada. Se você especificar o parâmetro AutoSize ao executar o comando Format-Table, o PowerShell calculará as larguras das colunas com base nos dados reais exibidos. Isso torna as colunas legíveis.

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)

O cmdlet Format-Table ainda pode truncar os dados, mas trunca apenas no final da tela. Propriedades, além da última exibida, recebem o tamanho correspondente ao que precisam para seu elemento de dados mais longo ser exibido corretamente.

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) {}

O comando Format-Table assume que as propriedades são listadas em ordem de importância. O cmdlet tenta exibir completamente as propriedades mais próximas do início. Se o comando Format-Table não puder exibir todas as propriedades, ele removerá algumas colunas da exibição. Você pode ver esse comportamento na propriedade DependentServices do exemplo anterior.

Quebra automática de linha na saída de Format-Table em colunas

Você pode forçar dados Format-Table longos a serem encapsulados em sua coluna de exibição usando o parâmetro Wrap. Usar o parâmetro Wrap pode não fazer o que você espera, já que ele usará as configurações padrão se você não especificar 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) {}

Usar o parâmetro Wrap por si só não deixa o processamento muito mais lento. No entanto, usar AutoSize para formatar uma lista de arquivos recursivos de uma estrutura de diretório grande pode levar muito tempo e usar muita memória antes de exibir os primeiros itens de saída.

Se você não estiver preocupado com a carga do sistema, AutoSize funcionará bem com o parâmetro Wrap. As colunas iniciais ainda usam a largura necessária para exibir itens em uma linha, mas a coluna final é quebrada, caso necessário.

Observação

Algumas colunas podem não ser exibidas quando você especifica as colunas mais largas primeiro. Para obter melhores resultados, especifique os elementos de dados menores primeiro.

No exemplo a seguir, especificamos as propriedades mais amplas primeiro.

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

Mesmo com a quebrar de linha, a coluna Id final é omitida:

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

Organizar a saída da tabela

Outro parâmetro útil para controlar a saída tabular é GroupBy. Listagens de tabela mais longas podem ser especialmente difíceis de comparar. O parâmetro GroupBy agrupa a saída com base em um valor da propriedade. Por exemplo, podemos agrupar serviços por StartType para uma inspeção mais fácil, omitindo o valor StartType da listagem de propriedades:

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…