Freigeben über


Import-Csv

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

Syntax

Import-Csv
      [[-Path] <string[]>]
      [[-Delimiter] <char>]
      [-LiteralPath <string[]>]
      [-Header <string[]>]
      [-Encoding <string>]
      [<CommonParameters>]
Import-Csv
      [[-Path] <string[]>]
      -UseCulture
      [-LiteralPath <string[]>]
      [-Header <string[]>]
      [-Encoding <string>]
      [<CommonParameters>]

Beschreibung

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

Sie können die Parameter des Cmdlets Import-Csv verwenden, um die Spaltenüberschriftzeile und das Elementtrennzeichen anzugeben, oder direkte Import-Csv, um das Listentrennzeichen für die aktuelle Kultur als Elementtrennzeichen zu verwenden.

Sie können auch die cmdlets ConvertTo-Csv und ConvertFrom-Csv verwenden, um Objekte in CSV-Zeichenfolgen (und zurück) zu konvertieren. Diese Cmdlets sind identisch mit den Export-CSV- und Import-Csv-Cmdlets, mit der Ausnahme, dass sie mit Daten aus der Pipeline anstelle von Dateien arbeiten.

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

Import-Csv verwendet das Bytereihenfolgenzeichen (BOM), um das Codierungsformat der Datei zu erkennen. Wenn die Datei keine BOM aufweist, wird davon ausgegangen, dass die Codierung UTF8 ist.

Beispiele

Beispiel 1: Importieren von Prozessobjekten

In diesem Beispiel wird gezeigt, wie Sie eine CSV-Datei mit Prozessobjekten exportieren und dann importieren.

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 Cmdlet Get-Process sendet Prozessobjekte an die Export-Csv. Das cmdlet Export-Csv konvertiert die Prozessobjekte in CSV-Zeichenfolgen und speichert die Zeichenfolgen in der Processes.csv Datei. Das cmdlet Import-Csv importiert die CSV-Zeichenfolgen aus der datei Processes.csv. Die Zeichenfolgen werden in der variablen $P gespeichert. Die variable $P wird an das Cmdlet Get-Member gesendet, das die Eigenschaften der importierten CSV-Zeichenfolgen anzeigt. Die $P Variable wird an das Cmdlet Format-Table weitergeleitet und zeigt die Objekte an.

Beispiel 2: Angeben des Trennzeichens

In diesem Beispiel wird gezeigt, wie Sie den parameter Delimiter des Cmdlets Import-Csv verwenden.

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

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

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

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

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

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

Beispiel 4: Ändern von Eigenschaftsnamen in einem importierten Objekt

In diesem Beispiel wird gezeigt, wie Sie den parameter Header von Import-Csv verwenden, um die Namen der 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 Cmdlet Start-Job startet einen Hintergrundauftrag, der Get-Processausgeführt wird. Ein Auftragsobjekt wird an das Cmdlet Export-Csv weitergeleitet 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 cmdlet Get-Content, um die CSV-Zeichenfolge aus der datei Jobs.csv abzurufen. Die $A Variable wird verwendet, um den Standardheader aus der Datei zu entfernen. Das Cmdlet Out-File speichert die neue Version der datei Jobs.csv in der variablen $A. Das cmdlet Import-Csv importiert die Jobs.csv Datei und verwendet den parameter Header, um die $Header Variable anzuwenden. Die $J Variable enthält das importierte PSCustomObject- und zeigt das Objekt in der PowerShell-Konsole an.

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

In diesem Beispiel wird gezeigt, wie Sie ein benutzerdefiniertes Objekt in PowerShell mithilfe einer CSV-Datei 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

Verwenden Sie zum Erstellen der Links.csv Datei die in der Get-Content Ausgabe angezeigten Werte.

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

Beispiel 6: Importieren einer CSV,die einen Wert fehlt

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

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 weren't 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

Das Cmdlet Get-Content zeigt die Projects.csv Datei an. Die Kopfzeile fehlt ein Wert zwischen ProjectName und Completed. Das cmdlet Import-Csv importiert die Projects.csv Datei und zeigt eine Warnmeldung an, da H1- ein Standardheadername ist.

Parameter

-Delimiter

Gibt das Trennzeichen an, das die Eigenschaftswerte in der CSV-Datei trennt. 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 Escapezeichen wie Tabstoppzeichen (`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, können Import-Csv die Objekte nicht aus den CSV-Zeichenfolgen erstellen und die vollständigen CSV-Zeichenfolgen zurückgeben.

Typ:Char
Position:1
Standardwert:comma (,)
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Encoding

Gibt den Typ der Codierung für die Zieldatei an. Der Standardwert ist Default.

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

  • ASCII Verwendet ASCII-Zeichensatz (7-Bit).
  • BigEndianUnicode verwendet UTF-16 mit der Big-End-Byte-Reihenfolge.
  • Default Verwendet die Codierung, die der aktiven Codepage des Systems entspricht (in der Regel ANSI).
  • OEM Verwendet die Codierung, die der aktuellen OEM-Codeseite des Systems entspricht.
  • Unicode verwendet UTF-16 mit der Little-Endian Byte-Reihenfolge.
  • UTF7 verwendet UTF-7.
  • UTF8 verwendet UTF-8.
  • UTF32 verwendet UTF-32 mit der Little-End-Byte-Reihenfolge.
Typ:String
Zulässige Werte:ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32
Position:Named
Standardwert:Default
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Header

Gibt eine alternative Spaltenüberschriftzeile für die importierte Datei an. Die Spaltenüberschrift bestimmt die Eigenschaftennamen der objekte, die von Import-Csverstellt wurden.

Geben Sie Spaltenüberschriften als durch Zeichen getrennte Liste ein. Schließen Sie die Kopfzeilenzeichenfolge nicht in Anführungszeichen ein. Schließen Sie jede Spaltenüberschrift in einfache Anführungszeichen ein.

Wenn Sie weniger Spaltenüberschriften eingeben, als Datenspalten vorhanden sind, werden die verbleibenden Datenspalten verworfen. Wenn Sie mehr Spaltenüberschriften eingeben, als Datenspalten vorhanden sind, werden die zusätzlichen Spaltenüberschriften mit leeren Datenspalten erstellt.

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

Typ:String[]
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-LiteralPath

Gibt den Pfad zur zu importierenden CSV-Datei an. Im Gegensatz zu Pathwird der Wert des LiteralPath--Parameters genau so verwendet, wie er eingegeben wird. Es werden keine Zeichen als Wildcards interpretiert. Wenn der Pfad Escapezeichen enthält, schließen Sie ihn in einfache Anführungszeichen ein. Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.

Typ:String[]
Aliase:PSPath
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-Path

Gibt den Pfad zur zu importierenden CSV-Datei an. Sie können auch einen Pfad an Import-Csvsenden.

Typ:String[]
Position:0
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:True
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:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

Eingaben

String

Sie können eine Zeichenfolge weiterleiten, die einen Pfad zu diesem Cmdlet enthält.

Ausgaben

Object

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

Hinweise

Windows PowerShell enthält die folgenden Aliase für Import-Csv:

  • ipcsv

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

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 der Elemente in den Zeilen sind die Eigenschaftswerte.

Die Spaltenüberschriftszeile bestimmt die Anzahl der Spalten und die Spaltennamen. Die Spaltennamen sind auch die Namen der Eigenschaften der Objekte. Die erste Zeile wird als Spaltenüberschriften interpretiert, es sei denn, Sie verwenden den parameter Header, um Spaltenüberschriften anzugeben. Wenn eine Zeile mehr Werte als die Überschriftenzeile aufweist, werden die zusätzlichen Werte ignoriert.

Wenn in der Spaltenüberschriftzeile ein Wert fehlt oder ein Null- oder leerer Wert enthalten ist, verwendet Import-CsvH- gefolgt von einer Zahl für die fehlende Spaltenüberschrift und den Eigenschaftennamen.

In der CSV-Datei wird jedes Objekt durch eine durch Zeichen 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.