Reindirizzamento dell'output

PowerShell offre diversi cmdlet che consentono di controllare direttamente l'output dei dati. Questi cmdlet hanno in comune due importanti caratteristiche.

Per prima cosa, in genere trasformano i dati in una forma di testo, dal momento che convertono i dati in output per i componenti di sistema che richiedono input di testo. Ciò significa che devono rappresentare gli oggetti come testo. Di conseguenza, il testo viene formattato come viene visualizzato nella finestra della console di PowerShell.

In secondo luogo, questi cmdlet usano il verbo di PowerShell Out perché inviano informazioni da PowerShell a un'altra posizione.

Output console

Per impostazione predefinita, PowerShell invia i dati alla finestra host, che è esattamente ciò che fa il Out-Host cmdlet. L'uso principale per il cmdlet è il Out-Host paging. Ad esempio, il comando seguente usa Out-Host per paginare l'output del Get-Command cmdlet:

Get-Command | Out-Host -Paging

La visualizzazione della finestra host è esterna a PowerShell. Questo aspetto è importante perché quando i dati vengono inviati da PowerShell, vengono effettivamente rimossi. È possibile verificare quanto affermato se si prova a creare una pipeline per il paging dei dati alla finestra host e si tenta di formattarla come elenco, come illustrato di seguito:

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

Si potrebbe pensare che il comando visualizzerà pagine di informazioni sui processi in formato elenco. Al contrario, viene visualizzato l'elenco tabulare predefinito:

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 Out-Host cmdlet invia i dati direttamente alla console, quindi il Format-List comando non riceve mai nulla da formattare.

Il modo corretto per strutturare questo comando consiste nell'inserire il Out-Host cmdlet alla fine della pipeline, come illustrato di seguito. In questo modo, i dati dei processi vengono formattati in un elenco prima dell'esecuzione del paging e della visualizzazione.

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
...

Ciò si applica a tutti i cmdlet Out. Un cmdlet Out deve essere sempre visualizzato alla fine della pipeline.

Nota

Tutti i cmdlet Out eseguono il rendering dell'output come testo, usando la formattazione esistente per la finestra della console, inclusi i limiti di lunghezza delle righe.

Eliminazione dell'output

Il Out-Null cmdlet è progettato per eliminare immediatamente qualsiasi input ricevuto. Questa funzionalità è utile per l'eliminazione dei dati non necessari ottenuti come effetto collaterale dell'esecuzione di un comando. Quando si digita il comando seguente, non viene restituito alcun elemento dal comando :

Get-Command | Out-Null

Il Out-Null cmdlet non elimina l'output degli errori. Ad esempio, se si immette il comando seguente, viene visualizzato un messaggio che informa che PowerShell non riconosce Is-NotACommand:

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

Stampa di dati

Out-Printer è disponibile solo nelle piattaforme Windows.

È possibile stampare i dati usando il Out-Printer cmdlet . Il Out-Printer cmdlet usa la stampante predefinita se non si specifica un nome di stampante. È possibile usare qualsiasi stampante basata su Windows specificandone il nome visualizzato. Non è necessario alcun tipo di mapping delle porte della stampante, né una stampante fisica reale. Se ad esempio sono installati gli strumenti di acquisizione immagini per i documenti di Microsoft Office, è possibile inviare i dati in un file di immagine digitando:

Get-Command Get-Command | Out-Printer -Name 'Microsoft Office Document Image Writer'

Salvataggio dei dati

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

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

I risultati dell'uso del Out-File cmdlet potrebbero non essere quello previsto se si usa il reindirizzamento dell'output tradizionale. Per comprenderne il comportamento, è necessario essere consapevoli del contesto in cui opera il Out-File cmdlet.

In Window PowerShell 5.1 il Out-File cmdlet crea un file Unicode. Alcuni strumenti, che prevedono file ASCII, non funzionano correttamente con il formato di output predefinito. È possibile modificare il formato di output predefinito in ASCII usando il parametro Encoding :

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

Out-file formatta il contenuto del file in modo che sia simile all'output della console. In questo modo l'output viene troncato esattamente come avviene in una finestra della console nella maggior parte dei casi. Se ad esempio si esegue il comando seguente:

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

L'output dettagliato sarà simile al seguente:

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

Per ottenere l'output che non forza il ritorno a capo riga in modo che corrisponda alla larghezza dello schermo, è possibile usare il parametro Width per specificare la larghezza della riga. Dal momento che Width è un parametro intero a 32 bit, il valore massimo che può avere è 2147483647. Digitare quanto segue per impostare la lunghezza delle righe su questo valore massimo:

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

Il Out-File cmdlet è più utile quando si desidera salvare l'output come visualizzato nella console.