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…