Export-Csv: Convertire oggetti in file CSV in modo efficiente

Se hai bisogno di inviare informazioni da PowerShell a un file CSV, il cmdlet Export-CSV è qui per aiutarti. Questo cmdlet risparmia agli amministratori molto tempo nel gestire testi disordinati e trasformarli in un formato strutturato. Invece di utilizzare Excel, possiamo utilizzare PowerShell per creare file CSV.

Puoi creare file CSV per generare rapporti, inviare a database e altro ancora da qualsiasi oggetto PowerShell utilizzando il cmdlet Export-Csv.

Il formato CSV è semplicemente una lista di righe separate da virgole memorizzate come file di testo. Essendo solo un file di testo, tecnicamente potremmo utilizzare un comando generico per file di testo come Set-Content per fare il lavoro. Tuttavia, utilizzare un comando generico richiederebbe la creazione della struttura CSV necessaria. Perché farlo quando abbiamo già a disposizione il comando Export-Csv per inviare l’output CSV a un file?

I file CSV richiedono una struttura specifica. La capacità di questo cmdlet di comprendere, leggere e trasformare le informazioni in file CSV è ciò che rende così utile questo cmdlet di PowerShell.

Gestisci e genera rapporti su Active Directory, Exchange e Microsoft 365 con ManageEngine ADManager Plus. Scarica la versione di prova gratuita!

Oggetti -eq Righe CSV

Il cmdlet Export-Csv ha un solo scopo; salvare gli oggetti PowerShell in un file CSV.

Supponiamo di avere un oggetto con due proprietà chiamate foo e bar. Ognuna di queste proprietà ha valori rispettivi di 1 e 2. Quando invii quell’oggetto a Export-Csv, verrà creato un file CSV con due colonne e una sola riga. Puoi quindi importare i contenuti CSV e ispezionare come appare.

PS> $testObject = [pscustomobject]@{'foo' = 1; 'bar' = 2}
PS> $testObject | Export-Csv -Path C:\TestObject.csv
PS> $testObject
foo	bar
1 	2
PS> Import-Csv -Path C:\TestObject.csv
foo	bar
1  	2

Essenzialmente PowerShell tratta un oggetto in memoria e un file CSV allo stesso modo! È anche che le etichette delle colonne devono essere intestazioni. Esportare gli oggetti usando questo cmdlet è come salvare l’oggetto nel sistema di file. Utilizzando il comando di testo generico PowerShell Get-Content, possiamo ispezionare il testo grezzo per vedere cosa ha esportato il comando Export-Csv.

PS> Get-Content -Path C:\TestObject.csv

#TYPE System.Management.Automation.PSCustomObject
"foo","bar" "1","2"

Nota che il comando utilizza le virgolette doppie intorno a ogni voce di riga. Questo ti consente di includere campi con spazi anche.

Parametri Utili di Export-CSV

In Windows PowerShell 5.1, Export-CSV cmdlte il tipo di oggetto che ha creato il file CSV. Se preferisci non vedere questa riga, un parametro popolare è NoTypeInformation che elimina completamente questa riga.

Se lavori con molti file CSV o fonti di dati diverse, potresti imparare sulla tua pelle che Export-CSV sovrascrive i file esistenti. Nessun problema però se stai utilizzando il parametro Append. Il parametro Append ti consente di aggiungere righe al CSV anziché sovrascrivere un file esistente.

Un altro parametro utile è Delimiter. Occasionalmente, potresti trovarti nella situazione di dover creare un file CSV che non utilizza il solito separatore di elenchi (virgola) per separare i campi. Invece, forse hai bisogno di creare un file con molti dati che utilizzano le tabulazioni come separatori o forse addirittura punto e virgola. Il cmdlet PowerShell Export-Csv può aiutarci anche specificando qualsiasi delimitatore di cui abbiamo bisogno.

PS> $testObject | Export-Csv -Path C:\TestObject.csv -Delimiter "`t"
PS> Get-Content -Path C:\TestObject.csv

#TYPE System.Management.Automation.PSCustomObject
"foo"   "bar" "1"     "2"

Gestione dei caratteri di citazione

Quando si creano righe CSV, Export-Csv racchiude tutti i campi tra virgolette. In alcune situazioni, ciò potrebbe non essere desiderabile. Sfortunatamente, non c’è modo di prevenirlo. Ma, utilizzando un po’ più di codice, puoi farlo accadere.

Di seguito puoi vedere un esempio di creazione del file CSV. Poi, Get-Content legge il file di testo grezzo, sostituisce tutte le virgolette doppie in memoria con nulla. Poi Set-Content scrive quelle informazioni in memoria sul disco.

$testObject | Export-Csv -Path C:\TestObject.csv
(Get-Content -Path C:\TestObject.csv -Raw).replace('"','') | Set-Content -Path C:\TestObject.csv

Gestisci e riporta Active Directory, Exchange e Microsoft 365 con ManageEngine ADManager Plus. Scarica la versione di prova gratuita!

Riepilogo

Il cmdlet Export-Csv è uno strumento semplice ma estremamente utile per gestire i dati CSV. Può comprendere la struttura di un file dati CSV e trasformare gli oggetti PowerShell in righe CSV.

I’m not about to go back to batch, or VBScript where creating a CSV file from an existing object required instantiating a FileSystemObject, creating a loop and a bunch of Write() methods!

Questo comando è un altro ottimo motivo per iniziare a scrivere codice PowerShell oggi!

Source:
https://adamtheautomator.com/export-csv/