Share via


Import-Csv

Erstellt tabellenähnliche benutzerdefinierte Objekte aus den Elementen in einer CSV-Datei (Comma Separated Value).

Syntax

Import-Csv
      [[-Delimiter] <Char>]
      [-Path] <String[]>
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      [[-Delimiter] <Char>]
      -LiteralPath <String[]>
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      [-Path] <String[]>
      -UseCulture
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      -LiteralPath <String[]>
      -UseCulture
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]

Beschreibung

Das Import-Csv Cmdlet erstellt tabellenähnliche benutzerdefinierte Objekte aus den Elementen in CSV-Dateien. Jede Spalte in der CSV-Datei wird eine Eigenschaft des benutzerdefinierten Objekts, und die Elemente in Zeilen werden zu Eigenschaftswerten. Import-Csv funktioniert für jede CSV-Datei, einschließlich Dateien, die Export-Csv vom Cmdlet generiert werden.

Sie können die Parameter des Import-Csv Cmdlets verwenden, um die Spaltenheaderzeile und das Elementtrennzeichen anzugeben, oder sie können direkt Import-Csv das Listentrennzeichen für die aktuelle Kultur als Elementtrennzeichen verwenden.

Sie können auch die ConvertTo-Csv Cmdlets und ConvertFrom-Csv verwenden, um Objekte in CSV-Zeichenfolgen (und zurück) zu konvertieren. Diese Cmdlets sind mit den Export-CSV Cmdlets und Import-Csv identisch, mit der Ausnahme, dass sie sich nicht mit Dateien befassen.

Wenn ein Headerzeileneintrag in einer CSV-Datei einen leeren oder NULL-Wert enthält, fügt PowerShell einen Standardheaderzeilennamen ein und zeigt eine Warnmeldung an.

Ab PowerShell 6.0 Import-Csv unterstützt jetzt das W3C-Format für erweiterte Protokolldateien.

Beispiele

Beispiel 1: Importieren von Prozessobjekten

In diesem Beispiel wird gezeigt, wie eine CSV-Datei mit Prozessobjekten exportiert und anschließend importiert wird.

Get-Process | Export-Csv -Path .\Processes.csv
$P = Import-Csv -Path .\Processes.csv
$P | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name                       MemberType   Definition
----                       ----------   ----------
Equals                     Method       bool Equals(System.Object obj)
GetHashCode                Method       int GetHashCode()
GetType                    Method       type GetType()
ToString                   Method       string ToString()
BasePriority               NoteProperty string BasePriority=8
Company                    NoteProperty string Company=Microsoft Corporation
...

$P | Format-Table

Name                   SI Handles VM            WS        PM        NPM    Path
----                   -- ------- --            --        --        ---    ----
ApplicationFrameHost   4  407     2199293489152 15884288  15151104  23792  C:\WINDOWS\system32\ApplicationFrameHost.exe
...
wininit                0  157     2199112204288 4591616   1630208   10376
winlogon               4  233     2199125549056 7659520   2826240   10992  C:\WINDOWS\System32\WinLogon.exe
WinStore.App           4  846     873435136     33652736  26607616  55432  C:\Program Files\WindowsApps\Microsoft.WindowsStore_11712.1001.13.0_x64__8weky...
WmiPrvSE               0  201     2199100219392 8830976   3297280   10632  C:\WINDOWS\system32\wbem\wmiprvse.exe
WmiPrvSE               0  407     2199157727232 18509824  12922880  16624  C:\WINDOWS\system32\wbem\wmiprvse.exe
WUDFHost               0  834     2199310204928 51945472  87441408  24984  C:\Windows\System32\WUDFHost.exe

Das Get-Process Cmdlet sendet Prozessobjekte über die Pipeline an Export-Csv. Das Export-Csv Cmdlet konvertiert die Prozessobjekte in CSV-Zeichenfolgen und speichert die Zeichenfolgen in der Processes.csv-Datei. Das Import-Csv Cmdlet importiert die CSV-Zeichenfolgen aus der Processes.csv-Datei. Die Zeichenfolgen werden in der $P Variablen gespeichert. Die $P Variable wird an das Get-Member Cmdlet gesendet, das die Eigenschaften der importierten CSV-Zeichenfolgen anzeigt. Die $P Variable wird in der Pipeline an das Format-Table Cmdlet gesendet und zeigt die Objekte an.

Beispiel 2: Angeben des Trennzeichens

In diesem Beispiel wird gezeigt, wie Der Trennzeichenparameter des Import-Csv Cmdlets verwendet wird.

Get-Process | Export-Csv -Path .\Processes.csv -Delimiter :
$P = Import-Csv -Path .\Processes.csv -Delimiter :
$P | Format-Table

Das Get-Process Cmdlet sendet Prozessobjekte in der Pipeline an Export-Csv. Das Export-Csv Cmdlet konvertiert die Prozessobjekte in CSV-Zeichenfolgen und speichert die Zeichenfolgen in der Processes.csv-Datei. Der Trennzeichenparameter wird verwendet, um ein Doppelpunkttrennzeichen anzugeben. Das Import-Csv Cmdlet importiert die CSV-Zeichenfolgen aus der Processes.csv-Datei. Die Zeichenfolgen werden in der $P Variablen gespeichert. An $P Variable wird die Pipeline an das Format-Table Cmdlet gesendet.

Beispiel 3: Angeben der aktuellen Kultur für das Trennzeichen

In diesem Beispiel wird gezeigt, wie Sie das Import-Csv Cmdlet mit dem UseCulture-Parameter verwenden.

(Get-Culture).TextInfo.ListSeparator
Get-Process | Export-Csv -Path .\Processes.csv -UseCulture
Import-Csv -Path .\Processes.csv -UseCulture

Das Get-Culture Cmdlet verwendet die geschachtelten Eigenschaften TextInfo und ListSeparator , um das Standardlistentrennzeichen der aktuellen Kultur abzurufen. Das Get-Process Cmdlet sendet Prozessobjekte in der Pipeline an Export-Csv. Das Export-Csv Cmdlet konvertiert die Prozessobjekte in CSV-Zeichenfolgen und speichert die Zeichenfolgen in der Processes.csv-Datei. Der UseCulture-Parameter verwendet das Standardlistentrennzeichen der aktuellen Kultur. Das Import-Csv Cmdlet importiert die CSV-Zeichenfolgen aus der Processes.csv-Datei.

Beispiel 4: Ändern von Eigenschaftennamen in einem importierten Objekt

In diesem Beispiel wird gezeigt, wie Sie den Header-Parameter von Import-Csv verwenden, um die Namen von Eigenschaften im resultierenden importierten Objekt zu ändern.

Start-Job -ScriptBlock { Get-Process } | Export-Csv -Path .\Jobs.csv -NoTypeInformation
$Header = 'State', 'MoreData', 'StatusMessage', 'Location', 'Command', 'StateInfo', 'Finished', 'InstanceId', 'Id', 'Name', 'ChildJobs', 'BeginTime', 'EndTime', 'JobType', 'Output', 'Error', 'Progress', 'Verbose', 'Debug', 'Warning', 'Information'
# Delete the default header from file
$A = Get-Content -Path .\Jobs.csv
$A = $A[1..($A.Count - 1)]
$A | Out-File -FilePath .\Jobs.csv
$J = Import-Csv -Path .\Jobs.csv -Header $Header
$J

State         : Running
MoreData      : True
StatusMessage :
Location      : localhost
Command       : Get-Process
StateInfo     : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : a259eb63-6824-4b97-a033-305108ae1c2e
Id            : 1
Name          : Job1
ChildJobs     : System.Collections.Generic.List`1[System.Management.Automation.Job]
BeginTime     : 12/20/2018 18:59:57
EndTime       :
JobType       : BackgroundJob
Output        : System.Management.Automation.PSDataCollection`1[System.Management.Automation.PSObject]
Error         : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ErrorRecord]
Progress      : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ProgressRecord]
Verbose       : System.Management.Automation.PSDataCollection`1[System.Management.Automation.VerboseRecord]
Debug         : System.Management.Automation.PSDataCollection`1[System.Management.Automation.DebugRecord]
Warning       : System.Management.Automation.PSDataCollection`1[System.Management.Automation.WarningRecord]
Information   : System.Management.Automation.PSDataCollection`1[System.Management.Automation.InformationRecord]

Das Start-Job Cmdlet startet einen Hintergrundauftrag, mit dem ausgeführt wird Get-Process. Ein Auftragsobjekt wird in der Pipeline an das Export-Csv Cmdlet gesendet und in eine CSV-Zeichenfolge konvertiert. Der NoTypeInformation-Parameter entfernt den Typinformationsheader aus der CSV-Ausgabe und ist in PowerShell v6 und höher optional. Die $Header Variable enthält einen benutzerdefinierten Header, der die folgenden Standardwerte ersetzt: HasMoreData, JobStateInfo, PSBeginTime, PSEndTime und PSJobTypeName. Die $A Variable verwendet das Get-Content Cmdlet, um die CSV-Zeichenfolge aus der Jobs.csv-Datei abzurufen. Die $A Variable wird verwendet, um den Standardheader aus der Datei zu entfernen. Das Out-File Cmdlet speichert die neue Version der Jobs.csv-Datei in der $A Variablen. Das Import-Csv Cmdlet importiert die Jobs.csv datei und verwendet den Header-Parameter , um die $Header Variable anzuwenden. Die $J Variable enthält das importierte PSCustomObject und zeigt das Objekt in der PowerShell-Konsole an.

Beispiel 5: Create eines benutzerdefinierten Objekts mithilfe einer CSV-Datei

In diesem Beispiel wird gezeigt, wie Sie mithilfe einer CSV-Datei ein benutzerdefiniertes Objekt in PowerShell erstellen.

Get-Content -Path .\Links.csv

113207,about_Aliases
113208,about_Arithmetic_Operators
113209,about_Arrays
113210,about_Assignment_Operators
113212,about_Automatic_Variables
113213,about_Break
113214,about_Command_Precedence
113215,about_Command_Syntax
144309,about_Comment_Based_Help
113216,about_CommonParameters
113217,about_Comparison_Operators
113218,about_Continue
113219,about_Core_Commands
113220,about_Data_Section

$A = Import-Csv -Path .\Links.csv -Header 'LinkID', 'TopicTitle'
$A | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
LinkID      NoteProperty string LinkID=113207
TopicTitle  NoteProperty string TopicTitle=about_Aliases

$A | Where-Object -Property TopicTitle -Like '*alias*'

LinkID TopicTitle
------ ----------
113207 about_Aliases

Um Ihre Links.csv-Datei zu erstellen, verwenden Sie die in der Ausgabe angezeigten Get-Content Werte.

Das Get-Content Cmdlet zeigt die datei Links.csv an. Das Import-Csv Cmdlet importiert die datei Links.csv. Der Header-Parameter gibt die Eigenschaftennamen LinkId und TopicTitle an. Die Objekte werden in der $A Variablen gespeichert. Das Get-Member Cmdlet zeigt die Eigenschaftennamen aus dem Header-Parameter an. Das Where-Object Cmdlet wählt Objekte mit der TopicTitle-Eigenschaft aus, die Alias enthält.

Beispiel 6: Importieren einer CSV-Datei, bei der ein Wert fehlt

Dieses Beispiel zeigt, wie das Import-Csv Cmdlet in PowerShell reagiert, wenn die Headerzeile in einer CSV-Datei einen NULL- oder leeren Wert enthält. Import-Csv ersetzt einen Standardnamen für die fehlende Headerzeile, die zum Eigenschaftennamen des zurückgegebenen Objekts Import-Csv wird.

Get-Content -Path .\Projects.csv

ProjectID,ProjectName,,Completed
13,Inventory,Redmond,True
440,,FarEast,True
469,Marketing,Europe,False

Import-Csv -Path .\Projects.csv

WARNING: One or more headers were not specified. Default names starting with "H" have been used in place of any missing headers.

ProjectID ProjectName H1      Completed
--------- ----------- --      ---------
13        Inventory   Redmond True
440                   FarEast True
469       Marketing   Europe  False

(Import-Csv -Path .\Projects.csv).H1

WARNING: One or more headers were not specified. Default names starting with "H" have been used in place of any missing headers.
Redmond
FarEast
Europe

Verwenden Sie zum Erstellen Ihrer Projects.csv-Datei die Werte, die in der Ausgabe des Beispiels Get-Content angezeigt werden.

Das Get-Content Cmdlet zeigt die datei Projects.csv an. In der Headerzeile fehlt ein Wert zwischen ProjectName und Completed. Das Import-Csv Cmdlet importiert die Projects.csv-Datei und zeigt eine Warnmeldung an, da H1 ein Standardheadername ist. Der (Import-Csv -Path .\Projects.csv).H1 Befehl ruft die H1-Eigenschaftswerte ab und zeigt eine Warnung an.

Parameter

-Delimiter

Gibt das Trennzeichen für die Eigenschaftswerte in der CSV-Datei an. 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. Um mit Escapezeichen versehene Sonderzeichen wie Tabulatorzeichen (`t) anzugeben, schließen Sie sie in doppelte Anführungszeichen ein.

Wenn Sie ein anderes Zeichen als das tatsächliche Zeichenfolgentrennzeichen in der Datei angeben, Import-Csv können die Objekte nicht aus den CSV-Zeichenfolgen erstellt werden und geben die CSV-Zeichenfolgen zurück.

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

-Encoding

Gibt die Codierung für die importierte CSV-Datei an. Standardwert: utf8NoBOM.

Die zulässigen Werte für diesen Parameter sind wie folgt:

  • ascii: Verwendet die Codierung für den ASCII-Zeichensatz (7-Bit).
  • bigendianunicode: Codiert im UTF-16-Format mit der Big-Endian-Bytereihenfolge.
  • bigendianutf32: Codiert im UTF-32-Format mit der Big-Endian-Bytereihenfolge.
  • oem: Verwendet die Standardcodierung für MS-DOS- und Konsolenprogramme.
  • unicode: Codiert im UTF-16-Format mit der Bytereihenfolge little-endian.
  • utf7: Codiert im UTF-7-Format.
  • utf8: Codiert im UTF-8-Format.
  • utf8BOM: Codiert im UTF-8-Format mit Byte Order Mark (BOM)
  • utf8NoBOM: Codiert im UTF-8-Format ohne Byte Order Mark (BOM)
  • utf32: Codiert im UTF-32-Format.

Ab PowerShell 6.2 lässt der Codierungsparameter auch numerische IDs registrierter Codeseiten (z. B -Encoding 1251. ) oder Zeichenfolgennamen registrierter Codeseiten (z. B -Encoding "windows-1251". ) zu. Weitere Informationen finden Sie in der .NET-Dokumentation für Encoding.CodePage.

Hinweis

UTF-7* wird nicht mehr empfohlen. Ab PowerShell 7.1 wird eine Warnung geschrieben, wenn Sie für den Encoding-Parameter angebenutf7.

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Header

Gibt eine alternative Spaltenkopfzeile für die importierte Datei an. Der Spaltenheader bestimmt die Eigenschaftennamen der von Import-Csverstellten Objekte.

Geben Sie Spaltenheader als durch Trennzeichen getrennte Liste ein. Die Kopfzeichenfolge darf nicht in Anführungszeichen eingeschlossen werden. Schließen Sie jede Spaltenüberschrift in einzelne Anführungszeichen ein.

Wenn Sie weniger Spaltenheader eingeben, als Datenspalten vorhanden sind, werden die restlichen Datenspalten verworfen. Wenn Sie mehr Spaltenheader eingeben, als Datenspalten vorhanden sind, werden die zusätzlichen Spaltenheader mit leeren Datenspalten erstellt.

Wenn Sie den Header-Parameter verwenden, löschen Sie die ursprüngliche Headerzeile aus der CSV-Datei. Import-Csv Erstellt andernfalls ein zusätzliches Objekt aus den Elementen in der Kopfzeile.

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

-LiteralPath

Gibt den Pfad zu der zu importierenden CSV-Datei an. Im Gegensatz zu Path wird der Wert des LiteralPath-Parameters genauso verwendet, wie er eingegeben wurde. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einzelne Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Path

Gibt den Pfad zu der zu importierenden CSV-Datei an. Sie können auch einen Pfad an übergeben Import-Csv.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
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:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

String

Sie können eine Zeichenfolge, die einen Pfad enthält, an Import-Csvübergeben.

Ausgaben

Object

Dieses Cmdlet gibt die Objekte zurück, die durch den Inhalt in der CSV-Datei beschrieben werden.

Hinweise

Da es sich bei den importierten Objekten um CSV-Versionen des Objekttyps handelt, werden sie nicht von den Formatierungseinträgen des PowerShell-Typs erkannt und formatiert, die die Nicht-CSV-Versionen des Objekttyps formatieren.

Das Ergebnis eines Import-Csv Befehls ist eine Auflistung von Zeichenfolgen, die ein tabellenähnliches benutzerdefiniertes Objekt bilden. Jede Zeile ist eine separate Zeichenfolge, sodass Sie die Count-Eigenschaft des -Objekts verwenden können, um die Tabellenzeilen zu zählen. Die Spalten sind die Eigenschaften des Objekts, und die Elemente in den Zeilen sind die Eigenschaftswerte.

Die Spaltenkopfzeile bestimmt die Anzahl der Spalten und die Spaltennamen. Die Spaltennamen dienen auch als Namen der Objekteigenschaften . Die erste Zeile wird als Spaltenheader interpretiert, es sei denn, Sie verwenden den Header-Parameter , um Spaltenheader anzugeben. Weist eine beliebige Zeile mehr Werte als die Kopfzeile auf, werden die zusätzlichen Werte ignoriert.

Wenn in der Spaltenheaderzeile ein Wert fehlt oder ein NULL- oder leerer Wert enthalten ist, Import-Csv wird H gefolgt von einer Zahl für den fehlenden Spaltenheader und den Eigenschaftennamen verwendet.

In der CSV-Datei wird jedes Objekt durch eine durch Trennzeichen getrennte Liste der Eigenschaftswerte des Objekts dargestellt. Die Eigenschaftswerte werden mithilfe der ToString() -Methode des -Objekts in Zeichenfolgen konvertiert, sodass sie durch den Namen des Eigenschaftswerts dargestellt werden. Export-Csv exportiert die Methoden des -Objekts nicht.

Import-Csv unterstützt auch das W3C Extended Log-Format. Zeilen, die mit # beginnen, werden als Kommentare behandelt und ignoriert, es sei denn, der Kommentar beginnt mit #Fields: und enthält eine durch Trennzeichen getrennte Liste von Spaltennamen. In diesem Fall verwendet das Cmdlet diese Spaltennamen. Dies ist das Standardformat für Windows IIS und andere Webserverprotokolle. Weitere Informationen finden Sie unter Erweitertes Protokolldateiformat.