L’output di un comando che noi, o il sistema operativo, eseguiamo nel computer è il risultato generato da questi processi, può essere inviato a video, oppure stampato, per esempio, ci sono però alcuni comandi che mandano lunghe stringhe di dati sul monitor che, se devono essere consultati, diventa difficile leggerli tutti. Con PowerShell e il cmdlet Out-File possiamo reindirizzare l’output di questi comandi verso un file di testo da consultare in seguito o memorizzarlo per conservarlo.

Dato che l’output di questi comandi viene reindirizzato verso un file, a video non dovremmo vedere niente, se non il ritorno al prompt una volta eseguito, a meno che non siano presenti degli errori nel comando stesso o qualche blocco del sistema operativo nell’accesso a file o servizi, come nell’immagine che segue.

Reindirizzare l’output comando verso file testo PowerShell cmdlet Out-File

Out-File

Il cmdlet Out-File va a sostituire, o almeno si comporta nello stesso modo, il simbolo > che si utilizzava una volta per reindirizzare l’output nei comandi DOS. Con Out-File abbiamo in più una serie di parametri che ci danno un maggior controllo sulle informazioni che possiamo estrarre e salvare nel file.

Reindirizzare l’output comando verso file testo PowerShell cmdlet Out-File

Lista processi attivi

Per avere la lista di tutti i processi attivi in quel momento utilizziamo: Get-Process | Out-File -FilePath d:\ListaProcessiAttivi.txt, che non mostra niente a video, mentre il solo cmdlet Get-Process visualizza una lunga lista di informazioni.

Reindirizzare l’output comando verso file testo PowerShell cmdlet Out-File

Lista servizi

Per ottenere la lista dei servizi di Windows possiamo usare il comando: Get-Service | Format-Table -AutoSize | Out-File -FilePath d:\listaservizi.txt

Reindirizzare l’output comando verso file testo PowerShell cmdlet Out-File

Due parametri utili da aggiungere a Out-File sono -NoClobber che verifica l’esistenza di un file con lo stesso nome e non lo sovrascrive, mentre con -Append l’output del comando va ad aggiungersi alla fine del file listaservizi.txt così da poter vedere se ci sono stati dei cambiamenti nei servizi.

Reindirizzare l’output comando verso file testo PowerShell cmdlet Out-File

Parametro -Width

La console di PowerShell ha un limite di 80 caratteri nel mostrare i risultati e alcuni potrebbero essere tagliati. Per aumentare il numero di caratteri si aggiunge il parametro -Width seguito da un numero a nostra scelta: Get-Service | Format-Table -AutoSize | Out-File -Width 300 -FilePath d:\listaservizi.txt -Append

Reindirizzare l’output comando verso file testo PowerShell cmdlet Out-File

Estrarre gli eventi

Il visualizzatore eventi contiene le informazioni su tutto quello che succede nel sistema operativo, può servirci sapere quali sono gli ultimi 200 eventi successi: Get-WinEvent -LogName System -MaxEvents 200 | Format-List | Out-File -FilePath d:\listaeventi.txt.

Oppure estrarne una parte, in un determinato giorno e ora, magari per indagare le cause di una schermata blu o di un mancato aggiornamento:

  • $Begin = Get-Date -Date '01/02/2025 06:00:00'
  • $End = Get-Date -Date '01/02/2025 15:00:00'
  • Get-EventLog –LogName Application -After $Begin -Before $End | Format-List | Out-File -FilePath d:\listaeventi.txt

Reindirizzare l’output comando verso file testo PowerShell cmdlet Out-File

Lista file

Possiamo usare Out-File per creare un file con il contenuto completo di una cartella: Get-ChildItem c:\windows\system32 | Out-File -FilePath d:\listafile.txt -append. Oppure per avere la lista di tutti i documenti Word contenuti nel disco D: Get-ChildItem d:\*.doc -recurse Get-ChildItem d:\*.doc -recurse -force | Out-File -FilePath d:\listafile.txt -append

Reindirizzare l’output comando verso file testo PowerShell cmdlet Out-File

Per ulteriori informazioni ed esempi potete consultare questa pagina Microsoft.