Gestire i file CSV usando Import/Export-CSV in Powershell

Nella serie PowerShell, stiamo cercando di lavorare con i file in PowerShell. I primi tipi di file che stiamo coprendo e che sono utilizzati sono i tipi di file CSV (valori separati da virgola). Esamineremo due importanti cmdlets import-csv/export-csv che sono ampiamente utilizzati quando si lavora con CSV.

Iniziamo con l’estensione di file CSV, poiché è la più elementare. Faremo uso dell’esempio precedente, dove abbiamo memorizzato i processi attualmente in esecuzione su file:

#Defining file for export$exportedFile = 'C:\temp\exportedProcesses.csv'#Exporting as CSV - basicGet-Process | Export-Csv $exportedFile#Opening the filepsedit $exportedFile

Di default, Export-Csv scriverà un file delimitato da virgole utilizzando la codifica ASCII e sovrascriverà completamente qualsiasi file con lo stesso nome.
Export-Csv può essere utilizzato per aggiungere righe a un file esistente utilizzando il parametro Append. Quando viene usato il parametro Append, l’oggetto di input deve avere ciascuno dei campi elencati nell’intestazione CSV o verrà lanciato un errore a meno che non venga usato il parametro Force.
Dopo aver eseguito questo semplice esempio, avrete davanti a voi il file CSV aperto, che consiste in tutti i processi e ogni valore, separati da virgole. E questo è ciò che CSV sta effettivamente per valori separati da virgole. Il vantaggio di lavorare con i file CSV è che si ottengono oggetti personalizzati simili a tabelle, che possono essere facilmente filtrati. Questo tipo di file ha senso, specialmente per oggetti di dati semplici.
Export-Csv può essere istruito ad escludere questa intestazione usando il parametro NoTypeInformation:

Get-Process | Export-Csv processes.csv -NoTypeInformation 

L’importazione è molto semplice.

#Importing CSV file$data = Import-Csv $exportedFile#Showing content$data | Out-GridView

I file CSV (Comma-Separated Values) sono testo semplice. Applicazioni come Microsoft Excel possono lavorare con i file CSV senza cambiare il formato del file, anche se le funzioni avanzate di Excel non possono essere salvate in un file CSV.
Per impostazione predefinita, Import-Csv si aspetta che l’input abbia una riga di intestazione, che sia delimitato da virgole e che usi la codifica ASCII. Se uno qualsiasi di questi elementi è diverso, possono essere utilizzati i parametri del comando. Per esempio, una tabulazione può essere impostata come delimitatore.

Import-Csv TabDelimitedFile.tsv -Delimiter `t 

Un segno di spunta seguito da t (`t) è usato per rappresentare il carattere di tabulazione in PowerShell.

I dati importati usando Import-Csv saranno sempre formattati come una stringa. Se Import-Csv viene utilizzato per leggere un file contenente il seguente testo, ciascuno dei numeri sarà trattato come una stringa.

#Showing its type$data | Get-Member # TypeName: CSV:System.Diagnostics.Process$data.GetType() # PSCustomObject$data.GetType() # System.Array

È interessante vedere qui quale tipo viene recuperato dopo aver importato il file CSV. Il cmdlet Get-Member sull’oggetto $data stesso mostra che si tratta di un file CSV, e gli oggetti esportati sono di tipo System.Diagnostics.Process. Ma, dopo aver dato un’occhiata dedicata al primo oggetto e al tipo di contenitore, riconoscerete che l’oggetto importato non può più essere usato come processo. È diventato un PSCustomObject. Tuttavia, è ancora un miglioramento rispetto all’esportazione come semplice stringa. Puoi facilmente importarlo e usarlo come un semplice archivio di dati.
Il prossimo grande vantaggio nel lavorare con i file CSV è che puoi renderli modificabili con Microsoft Excel. Per ottenere questo, basta cambiare il delimitatore da virgola (,) a punto e virgola (;), poiché questo è il delimitatore predefinito per i file Excel. È possibile utilizzare l’apposito flag -Delimiter per questo compito.

#Exporting as CSV with specified delimiter ';'Get-Process | Export-Csv C:\temp\exportedProcesses.csv -Delimiter ';'#Importing the data$data = Import-Csv C:\temp\exportedProcesses.csv -Delimiter ';'#Showing the data$data | Out-GridView

Fate attenzione però, perché questo è un comportamento specifico della cultura. Per evitare i problemi con le diverse culture, puoi usare il flag -UseCulture.
Ora, l’editing con Excel è possibile. Per dimostrare la potenza di PowerShell, ora apriremo il file con Excel tramite PowerShell e l’uso del ComObject di Excel stesso.

#Create ComObject for Excel$excel = New-Object -ComObject Excel.Application#Make it visible$excel.Visible = $true#Open the CSV file$excel.Workbooks.Open($exportedFile)

Puoi provare ad aprire un file CSV che è stato esportato con il delimitatore virgola e punto e virgola per vedere la differenza tra i due approcci da solo.
Conclusione:
Abbiamo già coperto una sezione per capire come lavorare con CSV. Abbiamo coperto i cmdlets export-csv per cercare di esportare i file come CSV. Sono per lo più utilizzati durante la segnalazione che può essere visualizzata direttamente utilizzando excel. Ho usato personalmente Export-CSV e import-CSV mentre lavoravo con la piattaforma azure che copriremo qualche altro giorno in dettaglio.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *