In Windows PowerShell è disponibile un insieme di cmdlet che consentono di controllare quali proprietà visualizzare per particolari oggetti. I nomi di tutti questi cmdlet iniziano con il verbo Format. Consentono di selezionare una o più proprietà da visualizzare.
I cmdlet Format sono Format-Wide, Format-List, Format-Table e Format-Custom. In questo Manuale dell'utente verranno descritti solo i cmdlet Format-Wide, Format-List e Format-Table.
Ogni cmdlet di formattazione ha proprietà predefinite che verranno utilizzate qualora non si specifichino proprietà particolari da visualizzare. Ogni cmdlet utilizza inoltre lo stesso nome di parametro, ossia Property, per specificare quali proprietà si desidera visualizzare. Poiché Format-Wide consente di visualizzare una sola proprietà, il relativo parametro Property accetta solo un valore, mentre i parametri di proprietà per Format-List e Format-Table accettano un elenco di nomi di proprietà.
Se si utilizza il comando Get-Process -Name powershell con due istanze di Windows PowerShell in esecuzione, si ottiene un output analogo al seguente:
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
Nella parte restante di questa sezione verrà descritto l'utilizzo dei cmdlet Format per modificare il modo in cui l'output di questo comando viene visualizzato.
Utilizzo di Format-Wide per l'output di Single-Item
Per impostazione predefinita, tramite il cmdlet Format-Wide viene visualizzata solo la proprietà predefinita di un oggetto. Le informazioni associate a ciascun oggetto vengono visualizzate in una singola colonna:
PS> Get-Process -Name powershell | Format-Wide powershell powershell
È anche possibile specificare una proprietà non predefinita:
PS> Get-Process -Name powershell | Format-Wide -Property Id 2760 3448
Controllo della visualizzazione di Format-Wide mediante il parametro Column
Mediante il cmdlet Format-Wide è possibile visualizzare solo una proprietà alla volta. Ciò si dimostra utile per visualizzare elenchi semplici che contengano un solo elemento per riga. Per visualizzare un elenco semplice, impostare il valore del parametro Column su 1 digitando:
Get-Command Format-Wide -Property Name -Column 1
Utilizzo di Format-List per una visualizzazione elenco
Il cmdlet Format-List consente di visualizzare un oggetto sotto forma di elenco, con ciascuna proprietà etichettata e visualizzata su una riga distinta:
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
È possibile specificare tutte le proprietà che si desidera:
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
Come ottenere informazioni dettagliate utilizzando Format-List con i caratteri jolly
Il cmdlet Format-List consente di utilizzare un carattere jolly come valore del parametro Property, così da poter visualizzare informazioni dettagliate. Spesso gli oggetti includono più informazioni del necessario, ragione per cui in Windows PowerShell per impostazione predefinita non vengono visualizzati tutti i valori delle proprietà. Per visualizzare tutte le proprietà di un oggetto, utilizzare il comando Format-List -Property * . Il comando seguente consente di generare oltre 60 righe di output per un singolo processo:
Get-Process -Name powershell | Format-List -Property *
Sebbene il comando Format-List sia utile per visualizzare i dettagli, qualora si desideri una panoramica di un output che include molti elementi, spesso si dimostra più utile una semplice visualizzazione tabulare.
Utilizzo di Format-Table per l'output tabulare
Se si utilizza il cmdlet Format-Table senza specificare nomi di proprietà per formattare l'output del comando Get-Process , si ottiene esattamente lo stesso output di quando non viene effettuata alcuna formattazione. Il motivo è che i processi vengono in genere visualizzati nel formato tabulare, come accade per la maggior parte degli oggetti di 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
Miglioramento dell'output di Format-Table (parametro AutoSize)
Sebbene la visualizzazione tabulare sia utile per mostrare molte informazioni confrontabili, può rivelarsi difficile interpretarle qualora la capienza della visualizzazione sia eccessivamente ridotta per i dati. Se ad esempio si cerca di visualizzare il percorso, l'ID, il nome e l'azienda produttrice di un processo, l'output viene troncato nella colonna del percorso e dell'azienda produttrice:
PS> Get-Process -Name powershell | Format-Table -Property Path,Name,Id,Company Path Name Id Company ---- ---- -- ------- C:\Program Files... powershell 2836 Microsoft Corpor...
Se si specifica il parametro AutoSize quando si esegue il comando Format-Table, la larghezza delle colonne viene calcolata in base ai dati effettivi da visualizzare. Ciò rende leggibile la colonna Path, ma la colonna dell'azienda produttrice resta troncata:
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...
Il cmdlet Format-Table potrebbe continuare a troncare i dati, ma solo alla fine della schermata. Alle proprietà diverse dall'ultima visualizzata viene assegnato lo spazio necessario per visualizzare correttamente l'elemento di dati più lungo. Si può osservare che, se si scambiano le posizioni di Path e Company nell'elenco dei valori per Property, il nome dell'azienda produttrice rimane visibile ma il percorso viene troncato:
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...
Il comando Format-Table suppone che più una proprietà è vicina all'inizio dell'elenco delle proprietà più è importante. Pertanto viene tentata la visualizzazione completa delle proprietà più vicine all'inizio. Se il comando Format-Table non riesce a visualizzare tutte le proprietà, rimuoverà alcune colonne segnalandolo con un avviso. È possibile osservare questo comportamento rendendo la proprietà Name l'ultima dell'elenco:
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
Nell'output precedente, la colonna dell'ID è troncata per poterla contenere nell'elenco, mentre le intestazioni di colonna risultano impilate. Il ridimensionamento automatico delle colonne non sempre sortisce gli effetti desiderati.
Ritorno a capo dell'output nelle colonne con il comando Format-Table (parametro Wrap)
Quando si utilizza Format-Table, è possibile imporre il ritorno a capo di dati lunghi nelle rispettive colonne di visualizzazione ricorrendo al parametro Wrap. L'utilizzo del solo parametro Wrap non assicura tuttavia il conseguimento del risultato desiderato in quanto vengono utilizzate le impostazioni predefinite qualora non venga specificato anche il parametro 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
Un vantaggio dell'utilizzo del solo parametro Wrap è che l'elaborazione non viene molto rallentata. Se si utilizza il parametro AutoSize e si esegue un'elencazione ricorsiva dei file di una directory di grandi dimensioni, potrebbe essere necessario molto tempo ed essere utilizzata una grande quantità di memoria prima che i primi elementi dell'output vengano visualizzati.
Se il carico sul sistema non rappresenta una preoccupazione, l'utilizzo del parametro AutoSize insieme con il parametro Wrap risulta ottimale. Alle colonne iniziali viene sempre assegnata la larghezza necessaria per visualizzare gli elementi su una sola riga, proprio come quando si specifica AutoSize senza il parametro Wrap. La sola differenza è che nella colonna finale verrà effettuato il ritorno a capo, se necessario:
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
Può accadere che alcune colonne non vengano visualizzate se si specificano prima le colonne più larghe, pertanto è preferibile specificare per primi gli elementi di dati più piccoli. Nell'esempio seguente viene specificato come primo elemento il percorso, che è molto lungo; tuttavia, nonostante l'utilizzo del ritorno a capo, si perde la colonna finale Name:
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
Organizzazione dell'output della tabella (parametro GroupBy)
Un altro utile parametro per il controllo dell'output tabulare è GroupBy. Gli elenchi tabulari lunghi sono particolarmente difficili da comparare. Il parametro GroupBy consente di raggruppare l'output in base al valore di una proprietà. Ad esempio, è possibile raggruppare i processi per azienda per poterli analizzare meglio, omettendo il valore dell'azienda dall'elenco delle proprietà:
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