Uso dei comandi Format per modificare la visualizzazione di output

PowerShell include un set di cmdlet che consentono di controllare la visualizzazione delle proprietà per oggetti specifici. I nomi di tutti i cmdlet iniziano con il verbo Format. Consentono di selezionare le proprietà da visualizzare.

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

Questo articolo descrive i cmdlet Format-Wide, Format-List e Format-Table.

Ogni tipo di oggetto in PowerShell ha proprietà predefinite usate quando non si selezionano le proprietà da visualizzare. Ogni cmdlet usa lo stesso parametro Property per specificare le proprietà da visualizzare. Poiché Format-Wide visualizza solo una singola proprietà, il relativo parametro Property accetta un solo valore, ma i parametri della proprietà di Format-List e Format-Table accettano un elenco di nomi di proprietà.

In questo esempio, l'output predefinito del Get-Process cmdlet mostra che sono in esecuzione due istanze di Internet Explorer.

Get-Process -Name iexplore

Il formato predefinito per gli oggetti Process visualizza le proprietà indicate di seguito:

 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 di Format-Wide per l'output a singolo elemento

Per impostazione predefinita, il cmdlet Format-Wide visualizza solo la proprietà predefinita di un oggetto. Le informazioni associate a ogni oggetto sono visualizzate in una singola colonna:

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

È inoltre possibile specificare una proprietà non predefinita:

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

Controllo della visualizzazione a livello di formato con colonna

Con il cmdlet Format-Wide è possibile visualizzare unicamente una sola proprietà alla volta. È utile per la visualizzazione di elenchi di grandi dimensioni in più colonne.

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

Uso di Format-List per una visualizzazione elenco

Il cmdlet Format-List visualizza un oggetto sotto forma di elenco. Ogni proprietà ha un'etichetta ed è visualizzata in una riga 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

È possibile specificare il numero di proprietà che si vuole:

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

Ottenere informazioni dettagliate usando Format-List con caratteri jolly

Il cmdlet Format-List consente di usare un carattere jolly come valore del rispettivo parametro Property. In questo modo si possono visualizzare informazioni dettagliate. Gli oggetti includono spesso più informazioni di quelle necessarie, motivo per cui per impostazione predefinita PowerShell non visualizza tutti i valori della proprietà. Per visualizzare tutte le proprietà di un oggetto, usare il Format-List -Property * comando . Il comando seguente genera più di 60 righe di output per un singolo processo:

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

Anche se il comando Format-List è utile per la visualizzazione dei dettagli, se si vuole una panoramica dell'output che includa molti elementi, è spesso più utile una visualizzazione semplificata in formato tabulare.

Uso di Format-Table per l'output tabulare

Se si usa il cmdlet Format-Table senza nomi di proprietà specificati per formattare l'output del comando Get-Process, si ottiene esattamente lo stesso output di quando non si usa un cmdlet Format. Per impostazione predefinita, PowerShell visualizza gli oggetti Process in un formato tabulare.

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 è disponibile solo nelle piattaforme Windows.

Miglioramento dell'output della tabella di formato

Una visualizzazione tabulare è utile per visualizzare molte informazioni, ma potrebbe essere di difficile interpretazione se la schermata è troppo ristretta per contenere i dati. Nell'esempio precedente l'output è troncato. Se si specifica il parametro AutoSize quando si esegue il comando Format-Table, PowerShell calcola la larghezza delle colonne in base ai dati effettivi da visualizzare. In questo modo le colonne risultano leggibili.

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)

Il cmdlet Format-Table potrebbe comunque troncare i dati, ma solo alla fine della schermata. Per tutte le proprietà, fatta eccezione per l'ultima visualizzata, viene assegnato tutto lo spazio richiesto per la corretta visualizzazione degli elementi di dati più lunghi.

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

Il comando Format-Table presuppone che le proprietà siano elencate in ordine di importanza. Il cmdlet tenta di visualizzare completamente le proprietà più vicine all'inizio. Se il comando Format-Table non visualizza tutte le proprietà, rimuove alcune colonne dalla visualizzazione. Questo comportamento è illustrato nell'esempio precedente della proprietà DependentServices.

Wrapping dell'output format-table nelle colonne

È possibile forzare il wrapping dei dati lunghi Format-Table all'interno della relativa colonna di visualizzazione usando il parametro Wrap . È possibile che con il parametroWrap non si ottengano i risultati previsti, dal momento che il parametro usa le impostazioni predefinite se non è specificato anche 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) {}

L'uso del solo parametro Wrap non rallenta molto l'elaborazione. L'uso di AutoSize per formattare un elenco di file ricorsivi di una struttura di directory di grandi dimensioni potrebbe tuttavia richiedere molto tempo e usare una grande quantità di memoria prima di visualizzare i primi elementi dell'output.

Se non si teme il carico del sistema, AutoSize produce buoni risultati con il parametro Wrap. Le colonne iniziali usano la larghezza necessaria per visualizzare gli elementi in una sola riga, ma se è necessario viene applicato il ritorno a capo automatico nell'ultima colonna.

Nota

Alcune colonne potrebbero non essere visualizzate quando si specificano per prime le colonne più larghe. Per ottenere risultati ottimali, specificare prima gli elementi di dati più piccoli.

Nell'esempio seguente vengono specificate prima le proprietà più larghe.

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

Nonostante il ritorno a capo automatico, l'ultima colonna Id viene omessa:

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

Organizzazione dell'output della tabella

Un altro parametro utile per il controllo dell'output in formato tabulare è GroupBy. Specialmente gli elenchi in formato tabulare più lunghi possono essere difficili da confrontare. Il parametro GroupBy raggruppa l'output in base al valore di una proprietà. È ad esempio possibile raggruppare i servizi per StartType per un'analisi più semplice, omettendo il valore StartType nell'elenco delle proprietà:

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…