ConvertTo-Csv
Konvertiert .NET-Objekte in eine Reihe von zeichentrennten Zeichenfolgen (CSV).
Syntax
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>]
Beschreibung
Das Cmdlet ConvertTo-CSV
gibt eine Reihe von CSV-Zeichenfolgen (Character-Separated Value) zurück, die die von Ihnen übermittelten Objekte darstellen. Anschließend können Sie das Cmdlet ConvertFrom-Csv
verwenden, um Objekte aus den CSV-Zeichenfolgen neu zu erstellen. Die aus CSV konvertierten Objekte sind Zeichenfolgenwerte der ursprünglichen Objekte, die Eigenschaftswerte und keine Methoden enthalten.
Sie können das Cmdlet Export-Csv
verwenden, um Objekte in CSV-Zeichenfolgen zu konvertieren.
Export-CSV
ähnelt ConvertTo-CSV
, mit der Ausnahme, dass die CSV-Zeichenfolgen in einer Datei gespeichert werden.
Das Cmdlet ConvertTo-CSV
verfügt über Parameter, um ein anderes Trennzeichen als ein Komma anzugeben oder die aktuelle Kultur als Trennzeichen zu verwenden.
Beispiele
Beispiel 1: Konvertieren eines Objekts in CSV
In diesem Beispiel wird ein Process -Objekt in eine CSV-Zeichenfolge konvertiert.
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", ...
Das cmdlet Get-Process
ruft das Process-Objekt ab und verwendet den Parameter Name, um den PowerShell-Prozess anzugeben. Das Prozessobjekt wird an das Cmdlet ConvertTo-CSV
weitergeleitet. Das Cmdlet ConvertTo-CSV
konvertiert das Objekt in CSV-Zeichenfolgen. Der NoTypeInformation Parameter entfernt den #TYPE Informationsheader aus der CSV-Ausgabe und ist in PowerShell 6 nicht erforderlich.
Beispiel 2: Konvertieren eines DateTime-Objekts in CSV
In diesem Beispiel wird ein DateTime- -Objekt in eine CSV-Zeichenfolge konvertiert.
$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"
Das cmdlet Get-Date
ruft das DateTime- objekt ab und speichert es in der variablen $Date
. Das cmdlet ConvertTo-Csv
konvertiert das DateTime-objekt in Zeichenfolgen. Der parameter InputObject verwendet das in der $Date
Variable gespeicherte DateTime--Objekt. Der parameter Delimiter gibt ein Semikolon an, um die Zeichenfolgenwerte zu trennen. Der NoTypeInformation Parameter entfernt den #TYPE Informationsheader aus der CSV-Ausgabe und ist in PowerShell 6 nicht erforderlich.
Beispiel 3: Konvertieren des PowerShell-Ereignisprotokolls in CSV
In diesem Beispiel wird das Windows-Ereignisprotokoll für PowerShell in eine Reihe von CSV-Zeichenfolgen konvertiert.
(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", ...
Das Cmdlet Get-Culture
verwendet die geschachtelten Eigenschaften TextInfo- und ListSeparator- und zeigt das Standardlistentrennzeichen der aktuellen Kultur an. Das Cmdlet Get-WinEvent
ruft die Ereignisprotokollobjekte ab und verwendet den parameter LogName, um den Namen der Protokolldatei anzugeben. Die Ereignisprotokollobjekte werden an das Cmdlet ConvertTo-Csv
weitergeleitet. Das Cmdlet ConvertTo-Csv
konvertiert die Ereignisprotokollobjekte in eine Reihe von CSV-Zeichenfolgen. Der parameter UseCulture verwendet das Standardlistentrennzeichen der aktuellen Kultur als Trennzeichen. Der NoTypeInformation Parameter entfernt den #TYPE Informationsheader aus der CSV-Ausgabe und ist in PowerShell 6 nicht erforderlich.
Beispiel 4: Konvertieren in CSV mit Anführungszeichen um zwei Spalten
In diesem Beispiel wird ein DateTime- -Objekt in eine CSV-Zeichenfolge konvertiert.
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
Beispiel 5: Konvertieren in CSV mit Anführungszeichen nur bei Bedarf
In diesem Beispiel wird ein DateTime- -Objekt in eine CSV-Zeichenfolge konvertiert.
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
Beispiel 6: Konvertieren von Hashtables in CSV
Wenn Sie In PowerShell 7.2 und höher Hashtables in CSV konvertieren, werden die Schlüssel der ersten Hashtabelle serialisiert und als Header in der Ausgabe verwendet.
$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"
Beispiel 7: Konvertieren von Hashtables in CSV mit zusätzlichen Eigenschaften
Wenn Sie in PowerShell 7.2 und höher eine Hashtabelle konvertieren, die mit Add-Member
oder Select-Object
zusätzliche Eigenschaften hinzugefügt wurde, werden die zusätzlichen Eigenschaften auch als Header in der CSV-Ausgabe hinzugefügt.
$allPeople | Add-Member -Name ExtraProp -Value 42
$allPeople | ConvertTo-Csv
"Name","Number","ExtraProp"
"John Smith","1","42"
"Jane Smith","2","42"
Jede Hashtabelle verfügt über eine Eigenschaft namens ExtraProp
von Add-Member
hinzugefügt und dann in CSV konvertiert. Sie können sehen, ExtraProp
jetzt eine Kopfzeile in der Ausgabe ist.
Wenn eine hinzugefügte Eigenschaft den gleichen Namen wie ein Schlüssel aus der Hashtabelle aufweist, hat der Schlüssel Vorrang, und nur der Schlüssel wird in CSV konvertiert.
Parameter
-Delimiter
Gibt das Trennzeichen an, um die Eigenschaftswerte in CSV-Zeichenfolgen zu trennen. Der Standardwert ist ein Komma (,
). Geben Sie ein Zeichen ein, z. B. einen Doppelpunkt (:
). Um ein Semikolon (;
) anzugeben, schließen Sie es in einfache Anführungszeichen ein.
Typ: | Char |
Position: | 1 |
Standardwert: | comma (,) |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-IncludeTypeInformation
Wenn dieser Parameter verwendet wird, enthält die erste Zeile der Ausgabe #TYPE
gefolgt vom vollqualifizierten Namen des Objekttyps. Beispiel: #TYPE System.Diagnostics.Process
.
Dieser Parameter wurde in PowerShell 6.0 eingeführt.
Typ: | SwitchParameter |
Aliase: | ITI |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-InputObject
Gibt die Objekte an, die in CSV-Zeichenfolgen konvertiert werden. Geben Sie eine Variable ein, die die Objekte enthält, oder geben Sie einen Befehl oder Ausdruck ein, der die Objekte abruft. Sie können Objekte auch an ConvertTo-CSV
verrohren.
Typ: | PSObject |
Position: | 0 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | False |
-NoHeader
Wenn dieser Parameter verwendet wird, schreibt das Cmdlet keine Kopfzeile mit den Spaltennamen in die Ausgabe.
Dieser Parameter wurde in PowerShell 7.4 hinzugefügt.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-NoTypeInformation
Entfernt den #TYPE
Informationsheader aus der Ausgabe. Dieser Parameter wurde zur Standardeinstellung in PowerShell 6.0 und ist aus Gründen der Abwärtskompatibilität enthalten.
Typ: | SwitchParameter |
Aliase: | NTI |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-QuoteFields
Gibt die Namen der Spalten an, die zitiert werden sollen. Wenn dieser Parameter verwendet wird, werden nur die angegebenen Spalten zitiert. Dieser Parameter wurde in PowerShell 7.0 hinzugefügt.
Typ: | String[] |
Aliase: | QF |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-UseCulture
Verwendet das Listentrennzeichen für die aktuelle Kultur als Elementtrennzeichen. Um das Listentrennzeichen für eine Kultur zu finden, verwenden Sie den folgenden Befehl: (Get-Culture).TextInfo.ListSeparator
.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-UseQuotes
Gibt an, wann Anführungszeichen in den CSV-Dateien verwendet werden. Mögliche Werte sind:
- Nie - keine Anführungszeichen
- Immer - Anführungszeichen (Standardverhalten)
- AsNeeded - nur Anführungszeichenfelder, die ein Trennzeichen, ein doppeltes Anführungszeichen oder ein Zeilenumbruchzeichen enthalten
Dieser Parameter wurde in PowerShell 7.0 hinzugefügt.
Typ: | Microsoft.PowerShell.Commands.BaseCsvWritingCommand+QuoteKind |
Aliase: | UQ |
Position: | Named |
Standardwert: | Always |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
Sie können jedes Objekt, das über einen ETS-Adapter (Extended Type System) verfügt, an dieses Cmdlet weiterleiten.
Ausgaben
Dieses Cmdlet gibt eine oder mehrere Zeichenfolgen zurück, die jedes konvertierte Objekt darstellen.
Hinweise
Im CSV-Format wird jedes Objekt durch eine durch Zeichen getrennte Liste seines Eigenschaftswerts dargestellt. Die Eigenschaftswerte werden mithilfe der ToString()- methode des Objekts in Zeichenfolgen konvertiert. Die Zeichenfolgen werden durch den Eigenschaftswertnamen dargestellt.
ConvertTo-CSV
exportiert die Methoden des Objekts nicht.
Die CSV-Zeichenfolgen werden wie folgt ausgegeben:
- Wenn IncludeTypeInformation verwendet wird, besteht die erste Zeichenfolge aus #TYPE gefolgt vom vollqualifizierten Namen des Objekttyps. Beispiel: #TYPE System.Diagnostics.Process.
- Wenn IncludeTypeInformation nicht verwendet wird, enthält die erste Zeichenfolge die Spaltenüberschriften. Die Kopfzeilen enthalten die Eigenschaftennamen des ersten Objekts als durch Zeichen getrennte Liste.
- Die verbleibenden Zeichenfolgen enthalten durch Zeichen getrennte Listen der Eigenschaftswerte jedes Objekts.
Ab PowerShell 6.0 besteht das Standardverhalten von ConvertTo-CSV
darin, die #TYPE Informationen nicht in die CSV einzuschließen, und NoTypeInformation- impliziert ist.
IncludeTypeInformation- können verwendet werden, um die #TYPE Informationen einzuschließen und das Standardverhalten von ConvertTo-CSV
vor PowerShell 6.0 zu emulieren.
Wenn Sie mehrere Objekte an ConvertTo-CSV
übermitteln, sortiert ConvertTo-CSV
die Zeichenfolgen basierend auf den Eigenschaften des ersten objekts, das Sie übermitteln. Wenn die verbleibenden Objekte nicht über eine der angegebenen Eigenschaften verfügen, ist der Eigenschaftswert dieses Objekts Null, wie durch zwei aufeinander folgende Kommas dargestellt. Wenn die verbleibenden Objekte zusätzliche Eigenschaften aufweisen, werden diese Eigenschaftswerte ignoriert.