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 -Name Get-* | 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.