In Windows PowerShell sono disponibili vari cmdlet che consentono di controllare direttamente l'output dei dati. Tali cmdlet condividono due importanti caratteristiche.

In primo luogo i dati vengono in genere trasformati in testo, in quanto l'output dei dati viene inviato a componenti del sistema che necessitano di input testuale. Ciò comporta la necessità di rappresentare gli oggetti come testo. Pertanto il testo viene formattato nel modo in cui è visualizzato nella finestra della console di Windows PowerShell.

In secondo luogo questi cmdlet utilizzano il verbo Out di Windows PowerShell in quanto inviano informazioni da Windows PowerShell verso un'altra destinazione. Il cmdlet Out-Host non fa eccezione: la visualizzazione della finestra dell'host non è controllata da Windows PowerShell. Ciò è importante perché, quando i dati escono da Windows PowerShell, vengono rimossi. Questo comportamento è osservabile se si cerca di creare una pipeline che impagina i dati da inviare alla finestra dell'host e poi si tenta di formattarli sotto forma di elenco, come mostrato di seguito:

PS> Get-Process | Out-Host -Paging | Format-List

Ci si aspetta che mediante questo comando le pagine delle informazioni sui processi vengano visualizzate in forma di elenco. Invece vengono visualizzate nel formato predefinito di elenco tabulare:

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    101       5     1076       3316    32     0.05   2888 alg
...
    618      18    39348      51108   143   211.20    740 explorer
    257       8     9752      16828    79     3.02   2560 explorer
...
<SPACE> next page; <CR> next line; Q quit
...

Il cmdlet Out-Host invia i dati direttamente alla console, per cui il comando Format-List non riceve mai nessun elemento da formattare.

Il modo corretto di strutturare questo comando è di collocare il cmdlet Out-Host alla fine della pipeline, come illustrato di seguito. In tal modo i dati dei processi vengono formattati sotto forma di elenco prima di essere impaginati e visualizzati.

PS> Get-Process | Format-List | Out-Host -Paging


Id      : 2888
Handles : 101
CPU     : 0.046875
Name    : alg
...

Id      : 740
Handles : 612
CPU     : 211.703125
Name    : explorer

Id      : 2560
Handles : 257
CPU     : 3.015625
Name    : explorer
...
<SPACE> next page; <CR> next line; Q quit
...

Questo vale per tutti i cmdlet Out. Di conseguenza, i cmdlet Out devono sempre trovarsi alla fine della pipeline.

Nota

Tutti i cmdlet Out trasformano l'output in testo utilizzando la formattazione valida per la finestra della console, rispettandone anche i limiti di lunghezza delle righe.

Impaginazione dell'output della console (cmdlet Out-Host)

Per impostazione predefinita, Windows PowerShell invia i dati alla finestra dell'host. Tale operazione è esattamente quella eseguita dal cmdlet Out-Host. L'utilizzo principale del cmdlet Out-Host è l'impaginazione dei dati trattata in precedenza. Ad esempio, nel comando seguente viene utilizzato il cmdlet Out-Host per impaginare l'output del cmdlet Get-Command:

PS> Get-Command | Out-Host -Paging

Per impaginare i dati è anche possibile utilizzare la funzione more. In Windows PowerShell, more è una funzione che chiama Out-Host -Paging. Nel comando seguente viene illustrato l'utilizzo della funzione more per impaginare l'output di Get-Command:

PS> Get-Command | more

Se si includono uno o più nomi di file come argomenti della funzione more, verranno letti i file specificati, e il loro contenuto verrà impaginato e inviato all'host:

PS> more c:\boot.ini
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
...

Eliminazione dell'output (Out-Null)

Il cmdlet Out-Null consente di eliminare immediatamente l'input ricevuto. Questa funzionalità è utile per eliminare dati non necessari ottenuti come conseguenza secondaria dell'esecuzione di un comando. Quando si digita il comando seguente, non si ottiene nulla:

PS> Get-Command | Out-Null

Il cmdlet Out-Null non elimina l'output costituito da errori. Se ad esempio si immette il comando seguente, viene visualizzato un messaggio che informa del mancato riconoscimento di 'Is-NotACommand' da parte di Windows PowerShell:

PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' is not recognized as a cmdlet, function, operabl
e program, or script file.
At line:1 char:12
+ Get-Command  <<<< Is-NotACommand | Out-Null

Stampa dei dati (Out-Printer)

È possibile stampare i dati utilizzando il cmdlet Out-Printer. Il cmdlet Out-Printer utilizzerà la stampante predefinita se non si indica il nome di una stampante. È possibile utilizzare qualsiasi stampante basata su Windows specificandone il nome visualizzato. Non è necessario alcun tipo di mapping delle porte o anche di una stampante fisica. Se ad esempio sono installati gli strumenti di gestione delle immagini dei documenti di Microsoft Office, è possibile inviare i dati a un file di immagine digitando quanto segue:

PS> Get-Command Get-Command | Out-Printer -Name "Microsoft Office Document Image Writer"

Salvataggio dei dati (Out-File)

È possibile inviare l'output a un file anziché alla finestra della console utilizzando il cmdlet Out-File. Mediante la riga di comando seguente è possibile inviare l'elenco dei processi al file C:\temp\processlist.txt:

PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt 

Il risultato dell'utilizzo del cmdlet Out-File potrebbe differire da quello atteso qualora si sia abituati al tradizionale reindirizzamento dell'output. Per comprendere il funzionamento del cmdlet Out-File, occorre conoscere il contesto in cui opera.

Per impostazione predefinita il cmdlet Out-File crea un file Unicode, che in ultima analisi è la migliore impostazione predefinita, anche se ciò comporta che gli strumenti che si aspettano di ricevere file ASCII non funzionino correttamente con il formato di output predefinito. È possibile impostare su ASCII il formato di output predefinito utilizzando il parametro Encoding:

PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII

Out-file formatta il contenuto del file in modo che somigli all'output della console. Ciò fa sì che l'output sia troncato proprio come avviene nella maggior parte dei casi nella finestra della console. Se ad esempio si esegue il comando seguente:

PS> Get-Command | Out-File -FilePath c:\temp\output.txt

L'output sarà simile al seguente:

CommandType     Name                            Definition                     
-----------     ----                            ----------                     
Cmdlet          Add-Content                     Add-Content [-Path] <String[...
Cmdlet          Add-History                     Add-History [[-InputObject] ...
...

Per ottenere un output in cui le righe non vadano obbligatoriamente a capo per rispettare la larghezza della schermata, è possibile utilizzare il parametro Width per specificare la larghezza delle righe. Poiché Width è un parametro intero a 32 bit, il valore massimo è 2147483647. Digitare il comando seguente per impostare la larghezza delle righe sul valore massimo:

Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647

Il cmdlet Out-File è di grandissima utilità quando si desidera salvare l'output così come verrebbe visualizzato nella console. Per perfezionare il controllo del formato dell'output, è necessario utilizzare strumenti più avanzati, che verranno trattati nel prossimo capitolo insieme con informazioni dettagliate sulla modifica degli oggetti.




Argomenti della Guida