Magic Quadrant™ per la gestione degli accessi privilegiati 2025: Netwrix riconosciuta per il quarto anno consecutivo. Scarica il report.

Piattaforma
Centro risorseBlog
PowerShell Write to File: "Out-File" e Tecniche di Output del File

PowerShell Write to File: "Out-File" e Tecniche di Output del File

Nov 21, 2024

L'output di PowerShell va alla console per impostazione predefinita, ma puoi reindirizzare i risultati a file per log, report, automazione o risoluzione dei problemi. Il cmdlet Out-File offre pieno controllo sulla codifica, larghezza della riga e comportamento di sovrascrittura, mentre gli operatori di reindirizzamento (>, >>) sono più rapidi per lavori semplici. Alternative come Set-Content, Add-Content, o addirittura Export-Csv/ConvertTo-Json sono migliori quando hai bisogno di dati strutturati. Usa -Append , -NoClobber, Test-Path, e la reindirizzazione degli errori (2>, 3>) per gestire i log in modo sicuro.

Introduzione all'output in PowerShell

Chiunque sia familiare con PowerShell sa che l'output dei comandi PowerShell viene visualizzato nel terminale per impostazione predefinita. Tuttavia, potrebbero esserci situazioni in cui si desidera reindirizzare o salvare l'output in un file.

  • I comandi possono restituire una grande quantità di dati che è difficile gestire in tempo reale. Puoi reindirizzare o salvare questi dati per elaborarli o esaminarli quando preferisci.
  • Per utilizzare i risultati di un comando in un altro processo o script, puoi usare il comando di PowerShell output to file per salvare l'output in un file o una variabile per un facile riutilizzo.
  • I lavori pianificati o altri compiti automatizzati di solito spesso vengono eseguiti in background. Potresti non essere in grado di vedere l'output in tempo reale, quindi salvarlo ti permette di rivederlo in seguito.
  • A volte, l'output può contenere più informazioni di quelle che ti servono. Pertanto, puoi reindirizzarlo o salvarlo per filtrarlo e formattarlo.
  • Quando esegui comandi su sistemi remoti, potresti non avere accesso alla console per visualizzare l'output in tempo reale. Salvare o reindirizzare ti fornisce un resoconto di ciò che è accaduto sul sistema remoto.
  • Le organizzazioni generano rapporti basati su stati di sistema, configurazioni o metriche di prestazione. Utilizzando PowerShell, possono interrogare i dati di sistema, generare rapporti ed esportarli in un file per revisioni future.
  • PowerShell può essere utilizzato per raccogliere informazioni sull'inventario hardware e software per la gestione degli asset e la conformità. Questi dati possono poi essere esportati in un file per una maggiore visibilità e una gestione semplificata.
  • Quando si automatizzano compiti, è essenziale tracciare le azioni intraprese e i risultati. Reindirizzare l'output su un file aiuta a creare log per l'audit.
  • Se uno script fallisce, devi conoscere la causa principale. Salvando l'output, puoi esaminarlo in seguito per la gestione degli errori, il debugging e la risoluzione dei problemi.

In breve, reindirizzare o salvare l'output di PowerShell aumenta la produttività, aiuta nel debugging, fornisce log utili e facilita l'automazione, specialmente in flussi di lavoro complessi o quando si lavora con grandi set di dati.

Metodi principali per esportare i risultati di PowerShell in file

Il Cmdlet Out-File

Il metodo di scrittura in file di testo di PowerShell utilizza comunemente il cmdlet Out-File per inviare i risultati dei comandi (output) direttamente a un file. Nella sua forma più semplice, Out-File richiede di specificare un percorso e un nome file per scrivere l'output.

Per impostazione predefinita, il cmdlet sovrascrive un file esistente se uno con lo stesso nome esiste nel percorso specificato, oppure ne crea uno nuovo se non esiste.

Sintassi Out-File

Ecco la sintassi di base per il cmdlet Out-File:

      Out-File
[-FilePath] <cadena>
[[-Encoding] <Encoding>]
[-Append]
[-Force]
[-NoClobber]
[-Width <int>]
[-NoNewline]
[-InputObject <psobject>]
[-WhatIf]
[-Confirmar]
[<CommonParameters>]
      

Parametri

Il cmdlet Out-File di PowerShell accetta i seguenti parametri:

Parametro

Descrizione

-Filepath

Imposta il percorso e il nome del file di output

-Codifica <Encoding>

Imposta la codifica per il file di output. Le opzioni includono ASCII, UTF8, UTF7, Unicode, ecc. Il valore predefinito è utf8NoBOM.

-Appendere

Aggiunge l'output alla fine del file senza sovrascrivere il contenuto esistente

-Force

Ignora l'attributo di sola lettura e sovrascrive un file esistente di sola lettura. Questo parametro non ignora le restrizioni di sicurezza.

-NoClobber

Impedisce la sovrascrittura di un file esistente. Per impostazione predefinita, se un file esiste nel percorso specificato, il cmdlet Out-File sovrascrive il file senza avvisare.

-Larghezza

Limita il numero di caratteri per ogni riga nel file di output (predefinito 80). Qualsiasi carattere aggiuntivo viene troncato, non riportato a capo.

-NoNewLine

Specifica che il contenuto scritto nel file di output non termina con un carattere di nuova riga. Non vengono inseriti spazi o nuove righe tra le stringhe di output e non viene aggiunta una nuova riga dopo l'ultima stringa di output.

-InputObject

Specifica gli oggetti da scrivere nel file. Digita un comando o un'espressione che ottiene gli oggetti o inserisci una variabile che contiene gli oggetti.

-WhatIf

Esegue il cmdlet in modalità test per mostrare i risultati attesi del cmdlet

-Conferma

Richiede conferma prima di eseguire il cmdlet

Casi d'uso

Per scrivere l'output direttamente in un file anziché visualizzarlo sullo schermo, puoi utilizzare l'approccio di PowerShell write output to file aggiungendo il cmdlet Out-File a un comando o variabile di PowerShell. Questa tecnica funziona anche per scrivere una stringa di testo in un file aggiungendo direttamente Out-File alla stringa.

Aggiungi Out-File a un cmdlet di PowerShell

Per recuperare un elenco di processi in esecuzione e utilizzare il metodo di salvataggio output di PowerShell in un file, salva l'output in un file di testo chiamato “Processes” nella cartella C:\Temp con il seguente esempio:

Get-Process | Out-File -FilePath C:\Temp\processes.txt

Qui, il cmdlet Get-Process elencherà tutti i processi in esecuzione. Con la funzionalità di PowerShell di reindirizzare l'output a un file, puoi prendere l'output di un comando e salvarlo immediatamente in un file di testo per analisi successive.

Aggiungi Out-File a una stringa di testo

Per scrivere una stringa utilizzando il metodo di PowerShell per scrivere stringhe in un file, come aggiungere “Hello, World!” a un file di testo chiamato “Test” nella posizione C:\Temp, utilizza il seguente cmdlet:

"Ciao, Mondo!" | Out-File -FilePath C:\Temp\Test.txt

Se il file non esiste, verrà creato. Se esiste, il contenuto verrà sovrascritto per impostazione predefinita.

Aggiungi Out-File a una variabile

Puoi anche utilizzare il cmdlet Out-File con una variabile. Ad esempio:

$variable | Out-File -FilePath "C:\path\to\file.txt"

Qui $variable è la variabile che contiene i dati (ad esempio, un output di PowerShell in un file di testo o l'output di un comando) che vuoi inviare a un file.

Operatori di reindirizzamento (> e >>)

Gli operatori di reindirizzamento (> e >>) in PowerShell sono un'alternativa semplice e veloce al cmdlet Out-File, che ti permette di reindirizzare l'output in un file.

  • L'operatore > è equivalente al cmdlet Out-File senza parametri aggiuntivi. Sovrascrive il file se esiste, oppure ne crea uno nuovo se non esiste.
  • L'operatore >> è equivalente a Out-File -Append. Aggiunge l'output al file se esiste, o ne crea uno nuovo se non esiste.

Questi operatori hanno anche altri usi come il reindirizzamento degli stream di errore o di output dettagliato, il che va oltre lo scopo di questo articolo.

Sintassi di base

La sintassi di base per utilizzare gli operatori è la seguente:

<Command> > <Path> # Sovrascrive

<Command> >> <Path> # Aggiunge in coda

Si noti che gli operatori di reindirizzamento non utilizzano parametri.

Esempio 1 – Utilizzo dell'operatore >

Questo cmdlet scrive l'output di Get-Process nel file Processes.txt, sovrascrivendo qualsiasi contenuto esistente nel caso in cui un file con questo nome esista già nella destinazione.

Get-Process > C:\Temp\Processes.txt

Esempio 2 – Utilizzo dell'operatore >>

Questo cmdlet aggiunge la data e l'ora correnti alla fine del file log.txt senza sovrascrivere il contenuto esistente.

Get-Date >> C:\Temp\log.txt

Se un file chiamato log.txt non esiste nel percorso specificato, lo crea e vi scrive la data e l'ora correnti.

Cmdlet Out-File rispetto agli operatori di reindirizzamento (> e >>)

Sia il cmdlet Out-File che gli operatori di reindirizzamento possono scrivere e aggiungere l'output di PowerShell a un file. Le differenze chiave tra i due sono discusse di seguito.

Caratteristica

Out-File Cmdlet

Operatori di reindirizzamento (> e >>)

Parametri

Accetta parametri

Non accetta parametri

Comportamento di Sovrascrittura

L'impostazione predefinita è sovrascrivere; usa -Append per aggiungere e -NoClobber per evitare la sovrascrittura

> sovrascrive, >> aggiunge in coda Nessun controllo integrato per prevenire la sovrascrittura

Controllo della codifica

Consente di specificare la codifica con -Encoding

Controllo limitato della codifica (UTF-8 in PowerShell 6+, Unicode nelle versioni più vecchie)

Controllo della larghezza

Supporta l'impostazione della larghezza della linea con -Width

Nessun controllo sulla larghezza della linea

Gestione degli errori

Vengono esportati solo i risultati positivi, quindi avvisi o errori non vengono scritti nel file

È possibile specificare quale flusso si desidera esportare, come successo, errore, avviso, ecc.

Utilizzo negli script

Ideale per script che richiedono maggiore controllo sull'output

Rapido e conveniente per un semplice reindirizzamento

Quando utilizzare ciascuno

In confronto, il cmdlet Out-File è più versatile ed è l'ideale per script complessi, con opzioni per la codifica, la larghezza e il controllo della sovrascrittura. Gli operatori di reindirizzamento, tuttavia, sono veloci e pratici per lavori di output rapidi che non richiedono personalizzazione. Di seguito è presente una breve guida su quando dovresti usare ciascuno.

Quando utilizzare il cmdlet Out-File

  • Per una codifica specifica (ad esempio, ASCII, UTF8, Unicode)
  • Per evitare la sovrascrittura dei file (utilizzando -NoClobber)
  • Per il controllo della larghezza di riga dell'output (utilizzando -Width)
  • In modalità di aggiunta mantenendo altre opzioni di controllo dell'output

Quando usare > e >>

  • Quando si desidera un rapido reindirizzamento dell'output senza formattazione o codifica aggiuntive
  • Quando si desidera sovrascrivere (>) o aggiungere (>>) al file esistente

Tutorial Windows PowerShell Scripting Tutorial (PDF) para Principiantes

Tecniche avanzate di output dei file

Gestisci Sovrascritture

Per impostazione predefinita, il cmdlet Out-File sovrascrive un file esistente se ne esiste uno con lo stesso nome nel percorso specificato, oppure crea un nuovo file se non esiste.

Per evitare di sovrascrivere un file esistente, puoi utilizzare il metodo di append di scrittura su file di PowerShell in uno dei due modi:

  • Aggiungi (appendi) l'output al file esistente
  • Impedisci la sovrascrittura, cosicché il file esistente non verrà sovrascritto e l'output non verrà salvato sul file

Aggiungi Output

Utilizza il parametro -Append con il cmdlet Out-File per aggiungere il nuovo output alla fine del file specificato senza sovrascriverne il contenuto esistente. Questo è particolarmente utile quando, ad esempio, vuoi registrare gli eventi in modo incrementale senza perdere i dati precedenti.

Questo comando aggiunge le cinque voci più recenti del registro di sistema al file event_log.txt.

Get-EventLog -LogName System -Newest 5 | Out-File -FilePath C:\Temp\event_log.txt -Append

Puoi anche utilizzare l'operatore di reindirizzamento >> per aggiungere l'output a un file esistente. Nell'esempio seguente, lo stato e i dettagli dei servizi sulla tua macchina locale vengono aggiunti al contenuto nel file log.txt.

Get-Service >> C:\Temp\log.txt

Prevenire la Sovrascrittura

Utilizza il parametro -NoClobber con il cmdlet Out-File per prevenire sovrascritture. Pertanto, se un file con lo stesso nome esiste nella posizione specificata, PowerShell non lo sovrascriverà e genererà un errore. Questo aiuta a proteggere i file importanti.

Il seguente comando tenterà di creare un file chiamato log.txt nella cartella Temp. Ma se un file con questo nome esiste già, verrà visualizzato un errore e l'output non verrà salvato nel file.

Get-Service | Out-File -FilePath C:\Temp\log.txt -NoClobber

Image

Forza Sovrascrittura

A volte non è possibile sovrascrivere il contenuto di un file esistente con l'output di un cmdlet PowerShell, poiché il file è di sola lettura. In una situazione del genere, utilizza il parametro -Force con il cmdlet Out-File per sovrascrivere i file di sola lettura.

Questo cmdlet scrive le informazioni dei servizi nel file Services.txt, assicurando che se il file Services.txt esiste già, verrà sovrascritto, anche se è in sola lettura.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Force

Formattazione e codifica dell'output

Il cmdlet Out-File di PowerShell offre opzioni per personalizzare la formattazione e la codifica dell'output.

Formatta Output

Il cmdlet Out-File potrebbe non visualizzare l'output come previsto, in particolare quando l'output ha più colonne. Per un output formattato e leggibile, puoi regolare la larghezza o utilizzare il cmdlet Format-Table.

Esempio 1 – Imposta la Larghezza

Utilizza il parametro -Width con Out-File per specificare la larghezza della linea per il file di output (il valore predefinito è di 80 caratteri).

Questo cmdlet scrive le informazioni dei servizi nel file Services.txt, impostando la larghezza della riga a 200 caratteri. Ciò consente un output più ampio senza interruzioni di riga.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Width 200

Esempio 2 – Formatta con Format-Table

Utilizza il cmdlet Format-Table per strutturare i dati prima di inviarli al cmdlet Out-File.

Questo cmdlet utilizza Format-Table -AutoSize per regolare automaticamente la larghezza delle colonne per una migliore leggibilità.

Get-Service | Format-Table -AutoSize | Out-File -FilePath C:\Temp\Services.txt

Imposta codifica

La codifica dell'output in PowerShell quando si utilizza il cmdlet Out-File garantisce che i dati siano interpretati correttamente, visualizzati e compatibili tra diversi sistemi e applicazioni.

Il parametro -Encoding aiuta a specificare come il testo di output viene codificato nel file. I tipi di codifica comuni includono:

  • UTF8 – Comune per le applicazioni web, supporta tutti i caratteri.
  • ASCII – Limitato ai caratteri inglesi di base, compatto ma restrittivo.
  • Unicode (UTF-16) – Ideale per la compatibilità con Windows, può gestire un'ampia gamma di caratteri speciali, simboli e testo internazionale, ma occupa più spazio.
  • Default – Utilizza la codifica predefinita del sistema, che può variare ed essere imprevedibile tra le piattaforme.

Esempio 1 — Utilizzare la codifica UTF-8

È una buona idea utilizzare la codifica UTF-8 se il file di output contiene caratteri speciali o se il file verrà utilizzato in ambienti dove UTF-8 è la codifica standard.

Questo cmdlet recupera un elenco di servizi nel sistema e invia le informazioni al file Services.txt impostando la codifica del file su UTF-8.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Encoding UTF8

Esempio 2 — Utilizzare la codifica ASCII

La codifica ASCII è comunemente utilizzata per file di testo più semplici.

Questo cmdlet recupera un elenco di servizi sul sistema e invia gli output al file Services.txt. Il parametro -Encoding viene utilizzato per convertire l'output in formato ASCII.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Encoding ASCII

Gestione di Specifici Flussi di Output

Il cmdlet Out-File scrive il risultato positivo del tuo comando o script in un file. Tuttavia, non scrive errori, avvisi o tipi specifici di messaggi nei file. Questo può essere ottenuto con l'operatore di reindirizzamento, che ti permette di specificare quale flusso desideri esportare in un file.

Operatore

Descrizione / Flusso

Scrivi cmdlet

>

Solo il successo

Write-Output

2>

Errore solo

Write-Error

3>

Avviso solo

Write-Warning

4>

Solo dettagliato

Write-Verbose

5>

Esegui il debug solo

Write-Debug

6>

Solo informazioni

Write-Information

*>

Tutto

Esempio 1 — Invia i messaggi di errore al file

Questo comando tenta di elencare (ls) un file chiamato Readme. Cerca il file nella directory corrente se non si specifica un percorso. Se il file non esiste, genera un messaggio di errore. L'operatore 2> reindirizza questo errore in un file chiamato error.log. Di conseguenza, l'errore non viene visualizzato sullo schermo ma salvato in error.log nella cartella Temp.

ls Readme 2> C:\Temp\error.log

Image

Esempio 2 — Invia Avvisi al file

In PowerShell, il flusso di avvertimento è il numero di flusso 3. Puoi usare 3> per reindirizzare gli avvertimenti in un file: È come segue:

# Comando che genera un avviso

<Your-Command> 3> C:\Temp\warning_log.txt

Metodi Alternativi per l'Output

Cmdlet Set-Content e Add-Content

I cmdlet Set-Content e Add-Content rappresentano un altro modo per scrivere l'output su file.

  • Set-Content sovrascrive il contenuto esistente nel file con il nuovo contenuto fornito. Se il file non esiste, lo crea.
  • Add-Content aggiunge nuovo contenuto alla fine del contenuto esistente del file. Se il file non esiste, lo creerà, ma non sostituirà il contenuto esistente.

Il cmdlet Set-Content

Utilizza il cmdlet Set-Content per scrivere o sostituire il contenuto di un file con nuovo contenuto.

Questo cmdlet sovrascrive il contenuto esistente nel file Test.txt. Il parametro -Value specifica il contenuto o il testo che sostituirà il contenuto esistente.

Set-Content -Path C:\Temp\Test.txt -Value "Aggiungi contenuto qui"

Il cmdlet Add-Content

Utilizza il cmdlet Add-Content per aggiungere contenuto a un file, il che significa che puoi aggiungere nuovi dati a un file esistente senza sovrascriverlo. Add-Content può anche aggiungere contenuto a più file contemporaneamente.

Proprio come il cmdlet Out-File e l'operatore di reindirizzamento, il cmdlet Add-Content crea un nuovo file se un file con lo stesso nome non esiste.

Esempio 1 — Aggiungi testo a un file

Questo cmdlet aggiunge nuovo testo al file Test.txt. Il parametro -Value specifica il contenuto o il testo che si desidera aggiungere al file.

Add-Content -Path C:\Temp\Test.txt -Value "Nuova riga da aggiungere"

Se il file è di sola lettura, devi utilizzare il parametro -Force per consentire l'aggiunta di contenuto.

Esempio 2 — Aggiungi testo a più file

Per aggiungere lo stesso contenuto a più file, hai diverse opzioni.

  • Utilizza i caratteri jolly nel percorso per specificare i file che desideri aggiornare
  • Escludi i nomi dei file che non vuoi aggiornare

Questo cmdlet aggiunge la data corrente a tutti i file .txt nella cartella Temp, tranne nel file con test nel nome del file:

Add-Content -Path C:\Temp\files\*.txt -Value (Get-Date) -Exclude "test*"

Esempio 3 — Aggiungi più righe di testo

Questo comando aggiunge più righe di testo al file Test.txt.

      $lines = @(
"Line 1: Details",
"Line 2: Specific Details"
)
Add-Content -Path C:\Temp\Test.txt -Value $lines
      

.Net Classes

Puoi utilizzare le classi .NET per produrre output su un file, specialmente in scenari avanzati che coinvolgono la gestione di grandi quantità di dati. Queste classi sono:

  • BinaryWriter – Scrive tipi di dati primitivi in forma binaria su un flusso.
  • StreamWriter – Utilizzato per scrivere caratteri in uno stream con una codifica specifica. Spesso usato per creare o modificare file di testo.
  • StringWriter – scrive informazioni in una stringa. Con questa classe, PowerShell memorizza le informazioni della stringa in un oggetto StringBuilder.

Utilizzare la classe StreamWriter in C# per inviare l'output a un file è semplice. L'esempio seguente mostra come puoi usarla.

      # Get the directories in C:\
$Dirs = Get-ChildItem -Path C:\ -Directory
# Open a stream writer
$File = 'C:\Temp\Dirs.txt'
$Stream = [System.IO.StreamWriter]::new($File)
# Write the folder names for these folders to the file
foreach($Dir in $Dirs) {
$Stream.WriteLine($Dir.FullName)
}
# Close the stream
$Stream.Close()
      

Questo script esegue i seguenti passaggi per elencare le directory nell'unità C:\ e salvare i loro percorsi in un file di testo:

Passo 1:

$Dirs = Get-ChildItem -Path C:\ -Directory

Questa riga utilizza Get-ChildItem con il parametro -Directory per ottenere solo le directory (non i file) nell'unità C:\. Il risultato viene memorizzato nella variabile $Dirs come elenco di oggetti directory.

Passaggio 2:

$File = 'C:\Temp\Dirs.txt'

$Stream = [System.IO.StreamWriter]::new($File)

Queste righe impostano un percorso di file (C:\Temp\Dirs.txt) dove verrà salvata la lista delle directory e poi inizializzano un oggetto StreamWriter per scrivere in quel file. Questo oggetto è assegnato a $Stream.

Passaggio 3:

foreach($Dir in $Dirs) {

$Stream.WriteLine($Dir.FullName)

}

Questo ciclo passa attraverso ogni oggetto directory in $Dirs. Per ogni directory, scrive il percorso completo ($Dir.FullName) nel file utilizzando $Stream.WriteLine.

Passaggio 4:

$Stream.Close()

Dopo aver scritto tutti i percorsi delle directory, lo script chiude lo StreamWriter.

Prenota una demo individuale per Netwrix Directory Manager:

Migliori pratiche per l'output di file PowerShell

Imposta la larghezza di linea corretta per evitare la troncatura

Dovresti impostare la larghezza di riga corretta con il parametro -Width in PowerShell per evitare la troncatura di righe lunghe e assicurarti che i file di output siano formattati come previsto.

Il parametro -Width nel cmdlet Out-File controlla il numero massimo di caratteri per riga nell'output. Per impostazione predefinita, è impostato su 80 caratteri, il che può troncare le righe più lunghe. Puoi, ad esempio, aumentare la larghezza a 200 caratteri, come mostrato di seguito:

Get-Process | Out-File -FilePath "output.txt" -Width 200

Considerate quanto segue:

  • Per evitare spazi bianchi non necessari o troncamenti, impostare una -Width per corrispondere alla riga più lunga. Per la maggior parte degli output, una larghezza di 120–200 caratteri dovrebbe funzionare bene.
  • Per i dati con molte colonne (come un file CSV), impostare una larghezza maggiore per ospitare l'intera riga.
  • In una pipeline, utilizzare Out-String -Width per controllare la larghezza della riga, assicurandosi che l'intera riga rientri nella larghezza specificata prima di inoltrarla a Out-File.

Imposta la codifica corretta

La codifica predefinita che PowerShell utilizza varia a seconda del cmdlet e della versione di PowerShell in uso. La seguente tabella mostra la codifica predefinita utilizzata:

Cmdlet / Operatore


PowerShell 5.1 (e versioni precedenti) Codifica predefinita


PowerShell Core / PowerShell 7+ Codifica predefinita


Out-File, Set-Content, Add-Content


UTF-16LE (Unicode)


UTF-8 (No BOM)


>, >> (Reindirizzamento)


ASCII


UTF-8 (No BOM)


Si raccomanda l'utilizzo della codifica UTF-8 per la compatibilità tra sistemi diversi. Tuttavia, per i sistemi legacy, potresti voler specificare -Encoding ASCII o -Encoding Unicode.

Utilizza $PSDefaultParameterValues per impostare i valori predefiniti negli script

$PSDefaultParameterValues in PowerShell consente di impostare valori predefiniti per i parametri in script e sessioni diverse, offrendo un modo per garantire la coerenza senza dover specificare ripetutamente le opzioni.

Ecco come puoi impostare un valore predefinito globale affinché Out-File utilizzi la codifica UTF8 e una larghezza maggiore.

$PSDefaultParameterValues["Out-File:Encoding"] = "UTF8"

$PSDefaultParameterValues["Out-File:Width"] = 200

Combina Out-File con Format-Table e Format-List per un output strutturato migliore

Combinare il cmdlet Out-File con Format-Table o Format-List è un ottimo modo per produrre file di testo di output ben strutturati e leggibili.

Format-Table

Format-Table è il migliore per dati con una struttura chiara a righe e colonne. Crea un formato organizzato e facile da leggere simile a una tabella. Tuttavia, per usarlo con il cmdlet Out-File, considera quanto segue:

  • Utilizza il parametro -Property per specificare solo le colonne di cui hai bisogno. Questo eviterà disordine nel file di output.
  • Utilizza il parametro -AutoSize per ottimizzare la larghezza delle colonne in modo che si adattino al contenuto. Questo ridurrà gli spazi bianchi in eccesso o la troncatura.
  • Utilizza il parametro -Width per prevenire la troncatura e mantenere l'allineamento dell'output.

Ecco un esempio:

Get-Process | Format-Table -Property Name, ID, CPU, WS -AutoSize | Out-File -FilePath "ProcessList.txt" -Width 200

Format-List

Format-List visualizza i dati verticalmente, con una proprietà per riga. Usatelo quando avete molte proprietà o campi con valori lunghi, in modo da evitare la troncatura di tali valori. Questo formato è adatto per report e log dettagliati.

Ecco un esempio di utilizzo di Format-List con Out-File:

Get-Process | Format-List -Property Name, ID, CPU, StartTime | Out-File -FilePath "DetailedProcessList.txt"

Come con Format-Table, seleziona solo le proprietà di cui hai bisogno.

Prevenire conflitti di file con Test-Path per verificare se i file esistono prima di scrivere

È sempre saggio verificare se un file esiste prima di tentare di scriverci sopra. In questo modo, è possibile evitare sovrascritture accidentali e decidere cosa fare quando un file esiste già. Il cmdlet Test-Path in PowerShell ti permette di controllare l'esistenza di un file.

Ecco i passaggi che dovresti seguire:

  1. Assegna il percorso del file a una variabile.
  2. Utilizza il cmdlet Test-Path per verificare se il file esiste.
  3. Decidere se si desidera aggiungere, sovrascrivere, rinominare o saltare la scrittura.
  4. Utilizza il cmdlet Out-File per creare o scrivere nel file.

Errori comuni e soluzioni

Il cmdlet Out-File in PowerShell può talvolta portare a insidie comuni, specialmente per quanto riguarda la gestione dei file, la codifica e l'aggiunta di contenuti. Alcuni problemi comuni e le loro soluzioni sono discussi di seguito.

Evitare la perdita di dati tramite sovrascrittura

Per impostazione predefinita, il cmdlet Out-File sovrascrive il contenuto di un file esistente senza avviso, se un file con lo stesso nome esiste già. Alcuni modi per evitarlo sono:

  • Aggiungi l'output al file esistente invece di sovrascriverlo utilizzando il parametro -Append.
  • Verifica se il file esiste con Test-Path e decidi come procedere con Out-File.

Evita la perdita di dati a causa di una codifica impropria

Per impostazione predefinita, Out-File utilizza la codifica Unicode in PowerShell 5.1 e versioni precedenti. Utilizza la codifica UTF-8 in PowerShell Core e versioni successive.

La codifica predefinita potrebbe non essere compatibile con il tuo sistema o con applicazioni che si aspettano una codifica diversa. Pertanto, dovresti specificare esplicitamente la codifica utilizzando il parametro -Encoding.

Gestire l'output negli script a lunga esecuzione per garantire le prestazioni

In ambienti vincolati come PowerShell ISE, l'esecuzione di script con il cmdlet Out-File può portare a problemi come:

  • Incapacità di gestire strutture dati complesse come previsto
  • Troncamento dell'output prolungato

Per gestire output lunghi, puoi:

  • Utilizza il parametro -Width per impostare una larghezza adeguata
  • Esporta dati complessi in formati strutturati come CSV o JSON utilizzando i cmdlet Export-Csv o ConvertTo-Json

Gestisci il logging e la gestione degli errori negli script PowerShell

A volte, un file è in uso o bloccato da un altro processo. In questo caso, il cmdlet Out-File genererà un errore poiché non sarà in grado di scrivervi. Puoi gestire questo e altri errori con un blocco try/catch. Un esempio è il seguente:

      $content = "Write content to file"
$filePath = "C:\Temp\Errors.txt"
try {
$content | Out-File -FilePath $filePath
Write-Host "File written successfully."
} catch {
Write-Host "File is in use or locked by another process."
}
      

FAQ

Condividi su

Scopri di più

Informazioni sull'autore

Asset Not Found

Tyler Reese

Vicepresidente della Gestione Prodotti, CISSP

Con più di due decenni nel settore della sicurezza del software, Tyler Reese conosce intimamente le sfide di identità e sicurezza in rapida evoluzione che le aziende affrontano oggi. Attualmente, ricopre il ruolo di direttore del prodotto per il portfolio di Netwrix Identity and Access Management, dove le sue responsabilità includono la valutazione delle tendenze di mercato, la definizione della direzione per la linea di prodotti IAM e, in ultima analisi, la soddisfazione delle esigenze degli utenti finali. La sua esperienza professionale spazia dalla consulenza IAM per le aziende Fortune 500 al lavoro come architetto aziendale di una grande compagnia diretta al consumatore. Attualmente detiene la certificazione CISSP.