Freigeben über


ConvertTo-Csv

Konvertiert .NET-Objekte in eine Reihe von CSV-Zeichenfolgen (Character-Separated Value).

Syntax

ConvertTo-Csv
              [-InputObject] <PSObject>
              [[-Delimiter] <Char>]
              [-IncludeTypeInformation]
              [-NoTypeInformation]
              [-QuoteFields <String[]>]
              [-UseQuotes <QuoteKind>]
              [<CommonParameters>]
ConvertTo-Csv
              [-InputObject] <PSObject>
              [-UseCulture]
              [-IncludeTypeInformation]
              [-NoTypeInformation]
              [-QuoteFields <String[]>]
              [-UseQuotes <QuoteKind>]
              [<CommonParameters>]

Beschreibung

Das ConvertTo-CSV Cmdlet gibt eine Reihe von CSV-Zeichenfolgen (Character-Separated Value) zurück, die die von Ihnen übermittelten Objekte darstellen. Anschließend können Sie das ConvertFrom-Csv Cmdlet 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 Export-Csv Cmdlet verwenden, um Objekte in CSV-Zeichenfolgen zu konvertieren. Export-CSVConvertTo-CSVähnelt , mit dem Unterschied, dass die CSV-Zeichenfolgen in einer Datei gespeichert werden.

Das ConvertTo-CSV Cmdlet 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 Get-Process Cmdlet ruft das Process-Objekt ab und verwendet den Parameter Name , um den PowerShell-Prozess anzugeben. Das Prozessobjekt wird in der Pipeline an das ConvertTo-CSV Cmdlet gesendet. Das ConvertTo-CSV Cmdlet 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 Get-Date Cmdlet ruft das DateTime-Objekt ab und speichert es in der $Date Variablen. Das ConvertTo-Csv Cmdlet konvertiert das DateTime-Objekt in Zeichenfolgen. Der InputObject-Parameter verwendet das in der $Date Variablen 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 Get-Culture Cmdlet verwendet die geschachtelten Eigenschaften TextInfo und ListSeparator und zeigt das Standardlistentrennzeichen der aktuellen Kultur an. Das Get-WinEvent Cmdlet ruft die Ereignisprotokollobjekte ab und verwendet den LogName-Parameter , um den Namen der Protokolldatei anzugeben. Die Ereignisprotokollobjekte werden über die Pipeline an das ConvertTo-Csv Cmdlet gesendet. Das ConvertTo-Csv Cmdlet konvertiert die Ereignisprotokollobjekte in eine Reihe von CSV-Zeichenfolgen. Der UseCulture-Parameter 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 Hashtabellen in CSV

Wenn Sie In PowerShell 7.2 und höher Hashtabellen 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 Hashtabellen in CSV mit zusätzlichen Eigenschaften

Wenn Sie in PowerShell 7.2 und höher eine Hashtabelle konvertieren, die zusätzliche Eigenschaften mit Add-Member hinzugefügt hat, oder Select-Object wenn die zusätzlichen Eigenschaften auch als Header in der CSV-Ausgabe hinzugefügt werden.

$allPeople | Add-Member -Name ExtraProp -Value 42
$allPeople | ConvertTo-Csv

"Name","Number","ExtraProp"
"John Smith","1","42"
"Jane Smith","2","42"

Jede Hashtabelle hat eine Eigenschaft namens by ExtraPropAdd-Member hinzugefügt und dann in CSV konvertiert. Sie können sehen ExtraProp , dass jetzt ein Header in der Ausgabe ist.

Wenn eine hinzugefügte Eigenschaft denselben Namen wie ein Schlüssel aus der Hashtabelle hat, 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.

Type:Char
Position:1
Default value:comma (,)
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeTypeInformation

Wenn dieser Parameter verwendet wird, enthält #TYPE die erste Zeile der Ausgabe den vollqualifizierten Namen des Objekttyps. Beispiel: #TYPE System.Diagnostics.Process.

Dieser Parameter wurde in PowerShell 6.0 eingeführt.

Type:SwitchParameter
Aliases:ITI
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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 einen Ausdruck ein, durch den die Objekte abgerufen werden. Sie können objekte auch an pipen ConvertTo-CSV.

Type:PSObject
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NoTypeInformation

Entfernt den #TYPE Informationsheader aus der Ausgabe. Dieser Parameter wurde zum Standard in PowerShell 6.0 und ist aus Gründen der Abwärtskompatibilität enthalten.

Type:SwitchParameter
Aliases:NTI
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-QuoteFields

Gibt die Namen der Spalten an, die in Anführungszeichen gesetzt werden sollen. Wenn dieser Parameter verwendet wird, werden nur die angegebenen Spalten in Anführungszeichen gesetzt. Dieser Parameter wurde in PowerShell 7.0 hinzugefügt.

Type:String[]
Aliases:QF
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseCulture

Verwendet das Listentrennzeichen für die aktuelle Kultur als Elementtrennzeichen. Verwenden Sie den folgenden Befehl, um das Listentrennzeichen für eine Kultur zu suchen: (Get-Culture).TextInfo.ListSeparator.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseQuotes

Gibt an, wann Anführungszeichen in den CSV-Dateien verwendet werden. Mögliche Werte:

  • Nie – nichts zitieren
  • Immer – Alles anführungszeichen (Standardverhalten)
  • AsNeeded: Nur Anführungszeichen, die ein Trennzeichen, ein Doppeltes Anführungszeichen oder Zeilenumbruchzeichen enthalten

Dieser Parameter wurde in PowerShell 7.0 hinzugefügt.

Type:Microsoft.PowerShell.Commands.BaseCsvWritingCommand+QuoteKind
Aliases:UQ
Position:Named
Default value:Always
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

PSObject

Sie können jedes Objekt, das über einen ETS-Adapter (Extended Type System) verfügt, an dieses Cmdlet weiterleiten.

Ausgaben

String

Dieses Cmdlet gibt mindestens eine Zeichenfolge zurück, die jedes konvertierte Objekt darstellt.

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 Eigenschaftenwertnamen 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. Beispielsweise #TYPE System.Diagnostics.Process.
  • Wenn IncludeTypeInformation nicht verwendet wird, enthält die erste Zeichenfolge die Spaltenheader. Die Header enthalten die Eigenschaftennamen des ersten Objekts als durch Zeichen getrennte Liste.
  • Die restlichen Zeichenfolgen enthalten durch Zeichen getrennte Listen der Eigenschaftenwerte jedes Objekts.

Ab PowerShell 6.0 besteht das Standardverhalten von ConvertTo-CSV darin, die #TYPE Informationen nicht in die CSV-Datei einzuschließen, und NoTypeInformation ist impliziert. IncludeTypeInformation kann verwendet werden, um die #TYPE Informationen einzuschließen und das Standardverhalten vor ConvertTo-CSV PowerShell 6.0 zu emulieren.

Wenn Sie mehrere Objekte an ConvertTo-CSVübermitteln, ConvertTo-CSV werden die Zeichenfolgen basierend auf den Eigenschaften des ersten Von Ihnen übermittelten Objekts sortiert. Wenn die verbleibenden Objekte nicht über eine der angegebenen Eigenschaften verfügen, ist der Eigenschaftswert dieses Objekts NULL, wie durch zwei aufeinanderfolgende Kommas dargestellt. Wenn die übrigen Objekte zusätzliche Eigenschaften aufweisen, werden diese Eigenschaftswerte ignoriert.