ConvertTo-Csv
Converte gli oggetti .NET in una serie di stringhe con valori delimitati da caratteri (CSV).
Sintassi
ConvertTo-Csv
[-InputObject] <PSObject>
[[-Delimiter] <Char>]
[-IncludeTypeInformation]
[-NoTypeInformation]
[-QuoteFields <String[]>]
[-UseQuotes <QuoteKind>]
[-NoHeader]
[<CommonParameters>]
ConvertTo-Csv
[-InputObject] <PSObject>
[-UseCulture]
[-IncludeTypeInformation]
[-NoTypeInformation]
[-QuoteFields <String[]>]
[-UseQuotes <QuoteKind>]
[-NoHeader]
[<CommonParameters>]
Descrizione
Il cmdlet ConvertTo-CSV
restituisce una serie di stringhe con valori delimitati da caratteri (CSV) che rappresentano gli oggetti inviati. È quindi possibile usare il cmdlet ConvertFrom-Csv
per ricreare oggetti dalle stringhe CSV. Gli oggetti convertiti da CSV sono valori stringa degli oggetti originali che contengono valori di proprietà e nessun metodo.
È possibile usare il cmdlet Export-Csv
per convertire gli oggetti in stringhe CSV.
Export-CSV
è simile a ConvertTo-CSV
, ad eccezione del fatto che salva le stringhe CSV in un file.
Il cmdlet ConvertTo-CSV
include parametri per specificare un delimitatore diverso da una virgola o usare le impostazioni cultura correnti come delimitatore.
Esempio
Esempio 1: Convertire un oggetto in csv
In questo esempio viene convertito un oggetto process in una stringa CSV.
Get-Process -Name pwsh | ConvertTo-Csv -NoTypeInformation
"Name","SI","Handles","VM","WS","PM","NPM","Path","Parent","Company","CPU","FileVersion", ...
"pwsh","8","950","2204001161216","100925440","59686912","67104", ...
Il cmdlet Get-Process
ottiene l'oggetto process e usa il parametro Name per specificare il processo di PowerShell. L'oggetto processo viene inviato alla pipeline al cmdlet ConvertTo-CSV
. Il cmdlet ConvertTo-CSV
converte l'oggetto in stringhe CSV. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni #TYPE dall'output CSV e non è necessaria in PowerShell 6.
Esempio 2: Convertire un oggetto DateTime in CSV
In questo esempio viene convertito un oggetto DateTime in una stringa CSV.
$Date = Get-Date
ConvertTo-Csv -InputObject $Date -Delimiter ';' -NoTypeInformation
"DisplayHint";"DateTime";"Date";"Day";"DayOfWeek";"DayOfYear";"Hour";"Kind";"Millisecond";"Minute";"Month";"Second";"Ticks";"TimeOfDay";"Year"
"DateTime";"Friday, January 4, 2019 14:40:51";"1/4/2019 00:00:00";"4";"Friday";"4";"14";"Local";"711";"40";"1";"51";"636822096517114991";"14:40:51.7114991";"2019"
Il cmdlet Get-Date
ottiene l'oggetto DateTime e lo salva nella variabile $Date
. Il cmdlet ConvertTo-Csv
converte l'oggetto DateTime in stringhe. Il parametro InputObject usa l'oggetto DateTime archiviato nella variabile $Date
. Il parametro Delimiter specifica un punto e virgola per separare i valori stringa. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni #TYPE dall'output CSV e non è necessaria in PowerShell 6.
Esempio 3: Convertire il registro eventi di PowerShell in CSV
Questo esempio converte il registro eventi di Windows per PowerShell in una serie di stringhe CSV.
(Get-Culture).TextInfo.ListSeparator
Get-WinEvent -LogName 'PowerShellCore/Operational' |
ConvertTo-Csv -UseCulture -NoTypeInformation
,
"Message","Id","Version","Qualifiers","Level","Task","Opcode","Keywords","RecordId", ...
"Error Message = System error""4100","1",,"3","106","19","0","31716","PowerShellCore", ...
Il cmdlet Get-Culture
usa le proprietà annidate TextInfo e ListSeparator e visualizza il separatore di elenco predefinito delle impostazioni cultura correnti. Il cmdlet Get-WinEvent
ottiene gli oggetti del registro eventi e usa il parametro LogName per specificare il nome del file di log. Gli oggetti del registro eventi vengono inviati alla pipeline al cmdlet ConvertTo-Csv
. Il cmdlet ConvertTo-Csv
converte gli oggetti del registro eventi in una serie di stringhe CSV. Il parametro UseCulture usa il separatore di elenco predefinito delle impostazioni cultura correnti come delimitatore. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni #TYPE dall'output CSV e non è necessaria in PowerShell 6.
Esempio 4: Convertire in csv con virgolette intorno a due colonne
In questo esempio viene convertito un oggetto DateTime in una stringa CSV.
Get-Date | ConvertTo-Csv -QuoteFields "DateTime","Date"
DisplayHint,"DateTime","Date",Day,DayOfWeek,DayOfYear,Hour,Kind,Millisecond,Minute,Month,Second,Ticks,TimeOfDay,Year
DateTime,"Thursday, August 22, 2019 11:27:34 AM","8/22/2019 12:00:00 AM",22,Thursday,234,11,Local,569,27,8,34,637020700545699784,11:27:34.5699784,2019
Esempio 5: Convertire in CSV con virgolette solo quando necessario
In questo esempio viene convertito un oggetto DateTime in una stringa CSV.
Get-Date | ConvertTo-Csv -UseQuotes AsNeeded
DisplayHint,DateTime,Date,Day,DayOfWeek,DayOfYear,Hour,Kind,Millisecond,Minute,Month,Second,Ticks,TimeOfDay,Year
DateTime,"Thursday, August 22, 2019 11:31:00 AM",8/22/2019 12:00:00 AM,22,Thursday,234,11,Local,713,31,8,0,637020702607132640,11:31:00.7132640,2019
Esempio 6: Convertire tabelle hash in CSV
In PowerShell 7.2 e versioni successive, quando si convertono tabelle hash in csv, le chiavi della prima tabella hash vengono serializzate e usate come intestazioni nell'output.
$person1 = @{
Name = 'John Smith'
Number = 1
}
$person2 = @{
Name = 'Jane Smith'
Number = 2
}
$allPeople = $person1, $person2
$allPeople | ConvertTo-Csv
"Name","Number"
"John Smith","1"
"Jane Smith","2"
Esempio 7: Conversione di tabelle hash in CSV con proprietà aggiuntive
In PowerShell 7.2 e versioni successive, quando si converte una tabella hash con proprietà aggiuntive aggiunte con Add-Member
o Select-Object
vengono aggiunte anche le proprietà aggiuntive come intestazione nell'output CSV.
$allPeople | Add-Member -Name ExtraProp -Value 42
$allPeople | ConvertTo-Csv
"Name","Number","ExtraProp"
"John Smith","1","42"
"Jane Smith","2","42"
Ogni tabella hash ha una proprietà denominata ExtraProp
aggiunta da Add-Member
e quindi convertita in CSV. È possibile visualizzare ExtraProp
è ora un'intestazione nell'output.
Se una proprietà aggiunta ha il stesso nome di una chiave della tabella hash, la chiave ha la precedenza e solo la chiave viene convertita in CSV.
Parametri
-Delimiter
Specifica il delimitatore per separare i valori delle proprietà nelle stringhe CSV. Il valore predefinito è una virgola (,
). Immettere un carattere, ad esempio due punti (:
). Per specificare un punto e virgola (;
) racchiuderlo tra virgolette singole.
Tipo: | Char |
Posizione: | 1 |
Valore predefinito: | comma (,) |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-IncludeTypeInformation
Quando questo parametro viene utilizzato la prima riga dell'output contiene #TYPE
seguito dal nome completo del tipo di oggetto. Ad esempio, #TYPE System.Diagnostics.Process
.
Questo parametro è stato introdotto in PowerShell 6.0.
Tipo: | SwitchParameter |
Alias: | ITI |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-InputObject
Specifica gli oggetti convertiti in stringhe CSV. Immettere una variabile contenente gli oggetti o digitare un comando o un'espressione che ottiene gli oggetti . È anche possibile inviare oggetti tramite pipe a ConvertTo-CSV
.
Tipo: | PSObject |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-NoHeader
Quando si usa questo parametro, il cmdlet non scrive una riga di intestazione contenente i nomi delle colonne nell'output.
Questo parametro è stato aggiunto in PowerShell 7.4.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-NoTypeInformation
Rimuove l'intestazione delle informazioni #TYPE
dall'output. Questo parametro è diventato l'impostazione predefinita in PowerShell 6.0 ed è incluso per la compatibilità con le versioni precedenti.
Tipo: | SwitchParameter |
Alias: | NTI |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-QuoteFields
Specifica i nomi delle colonne che devono essere racchiuse tra virgolette. Quando questo parametro viene utilizzato solo per le colonne specificate. Questo parametro è stato aggiunto in PowerShell 7.0.
Tipo: | String[] |
Alias: | QF |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-UseCulture
Usa il separatore di elenco per le impostazioni cultura correnti come delimitatore di elemento. Per trovare il separatore di elenco per le impostazioni cultura, usare il comando seguente: (Get-Culture).TextInfo.ListSeparator
.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-UseQuotes
Specifica quando le virgolette vengono usate nei file CSV. I valori possibili sono:
- Mai - non virgolette nulla
- Sempre - Virgolette tutto (comportamento predefinito)
- AsNeeded: solo i campi virgolette che contengono un carattere delimitatore, virgolette doppie o caratteri di nuova riga
Questo parametro è stato aggiunto in PowerShell 7.0.
Tipo: | Microsoft.PowerShell.Commands.BaseCsvWritingCommand+QuoteKind |
Alias: | UQ |
Posizione: | Named |
Valore predefinito: | Always |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
È possibile inviare tramite pipe qualsiasi oggetto con un adattatore ETS (Extended Type System) a questo cmdlet.
Output
Questo cmdlet restituisce una o più stringhe che rappresentano ogni oggetto convertito.
Note
In formato CSV, ogni oggetto è rappresentato da un elenco delimitato da caratteri del relativo valore della proprietà. I valori della proprietà vengono convertiti in stringhe usando il metodo toString() dell'oggetto. Le stringhe sono rappresentate dal nome del valore della proprietà.
ConvertTo-CSV
non esporta i metodi dell'oggetto.
Le stringhe CSV vengono restituite come segue:
- Se viene usato IncludeTypeInformation, la prima stringa è costituita da #TYPE seguito dal nome completo del tipo di oggetto. Ad esempio, #TYPE System.Diagnostics.Process.
- Se IncludeTypeInformation non viene usata la prima stringa include le intestazioni di colonna. Le intestazioni contengono i nomi delle proprietà del primo oggetto come elenco delimitato da caratteri.
- Le stringhe rimanenti contengono elenchi separati da caratteri dei valori delle proprietà di ogni oggetto.
A partire da PowerShell 6.0 il comportamento predefinito di ConvertTo-CSV
consiste nell'non includere le informazioni di #TYPE nel file CSV e NoTypeInformation è implicito.
IncludeTypeInformation può essere usato per includere le informazioni #TYPE ed emulare il comportamento predefinito di ConvertTo-CSV
prima di PowerShell 6.0.
Quando si inviano più oggetti a ConvertTo-CSV
, ConvertTo-CSV
ordina le stringhe in base alle proprietà del primo oggetto inviato. Se gli oggetti rimanenti non dispongono di una delle proprietà specificate, il valore della proprietà di tale oggetto è Null, come rappresentato da due virgole consecutive. Se gli oggetti rimanenti hanno proprietà aggiuntive, tali valori di proprietà vengono ignorati.