Share via


Import-Csv

Hiermee maakt u tabelachtige aangepaste objecten op basis van de items in een CSV-bestand (door tekens gescheiden waarden).

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>]

Description

Met de Import-Csv cmdlet worden tabelachtige aangepaste objecten gemaakt op basis van de items in CSV-bestanden. Elke kolom in het CSV-bestand wordt een eigenschap van het aangepaste object en de items in rijen worden de eigenschapswaarden. Import-Csv werkt op elk CSV-bestand, inclusief bestanden die door de Export-Csv cmdlet worden gegenereerd.

U kunt de parameters van de Import-Csv cmdlet gebruiken om de kolomkoprij en het itemscheidingsteken op te geven, of om Import-Csv het lijstscheidingsteken voor de huidige cultuur te gebruiken als het itemscheidingsteken.

U kunt ook de ConvertTo-Csv en ConvertFrom-Csv cmdlets gebruiken om objecten te converteren naar CSV-tekenreeksen (en terug). Deze cmdlets zijn hetzelfde als de Export-CSV cmdlets en Import-Csv cmdlets, behalve dat ze niet omgaan met bestanden.

Als een veldnamenrijvermelding in een CSV-bestand een lege of null-waarde bevat, wordt in PowerShell een standaardnaam voor de veldnamenrij ingevoegd en wordt een waarschuwingsbericht weergegeven.

Vanaf PowerShell 6.0 wordt Import-Csv nu de W3C Extended Log-bestandsindeling ondersteund.

Voorbeelden

Voorbeeld 1: Procesobjecten importeren

In dit voorbeeld ziet u hoe u een CSV-bestand met procesobjecten exporteert en importeert.

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

Met Get-Process de cmdlet worden procesobjecten naar de Export-Csvpijplijn verzonden. De Export-Csv cmdlet converteert de procesobjecten naar CSV-tekenreeksen en slaat de tekenreeksen op in het Processes.csv bestand. De Import-Csv cmdlet importeert de CSV-tekenreeksen uit het Processes.csv-bestand. De tekenreeksen worden opgeslagen in de $P variabele. De $P variabele wordt naar de pijplijn verzonden naar de Get-Member cmdlet waarin de eigenschappen van de geïmporteerde CSV-tekenreeksen worden weergegeven. De $P variabele wordt naar de Format-Table cmdlet verzonden en geeft de objecten weer.

Voorbeeld 2: Het scheidingsteken opgeven

In dit voorbeeld ziet u hoe u de parameter Scheidingsteken van de Import-Csv cmdlet gebruikt.

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

De Get-Process cmdlet verzendt procesobjecten in de pijplijn naar Export-Csv. De Export-Csv cmdlet converteert de procesobjecten naar CSV-tekenreeksen en slaat de tekenreeksen op in het Processes.csv bestand. De parameter Scheidingsteken wordt gebruikt om een dubbele puntscheidingsteken op te geven. De Import-Csv cmdlet importeert de CSV-tekenreeksen uit het Processes.csv-bestand. De tekenreeksen worden opgeslagen in de $P variabele. Naar $P een variabele wordt de pijplijn naar de Format-Table cmdlet verzonden.

Voorbeeld 3: De huidige cultuur voor het scheidingsteken opgeven

In dit voorbeeld ziet u hoe u de Import-Csv cmdlet gebruikt met de parameter UseCulture .

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

De Get-Culture cmdlet gebruikt de geneste eigenschappen TextInfo en ListSeparator om het standaardlijstscheidingsteken van de huidige cultuur op te halen. De Get-Process cmdlet verzendt procesobjecten in de pijplijn naar Export-Csv. De Export-Csv cmdlet converteert de procesobjecten naar CSV-tekenreeksen en slaat de tekenreeksen op in het Processes.csv bestand. De parameter UseCulture maakt gebruik van het standaardlijstscheidingsteken van de huidige cultuur. De Import-Csv cmdlet importeert de CSV-tekenreeksen uit het Processes.csv-bestand.

Voorbeeld 4: Eigenschapsnamen in een geïmporteerd object wijzigen

In dit voorbeeld ziet u hoe u de headerparameterImport-Csv gebruikt om de namen van eigenschappen in het resulterende geïmporteerde object te wijzigen.

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]

De Start-Job cmdlet start een achtergrondtaak die wordt uitgevoerd Get-Process. Er wordt een taakobject naar de pijplijn verzonden naar de Export-Csv cmdlet en geconverteerd naar een CSV-tekenreeks. De parameter NoTypeInformation verwijdert de typeinformatieheader uit de CSV-uitvoer en is optioneel in PowerShell v6 en hoger. De $Header variabele bevat een aangepaste header die de volgende standaardwaarden vervangt: HasMoreData, JobStateInfo, PSBeginTime, PSEndTime en PSJobTypeName. De $A variabele gebruikt de Get-Content cmdlet om de CSV-tekenreeks op te halen uit het Jobs.csv-bestand. De $A variabele wordt gebruikt om de standaardkoptekst uit het bestand te verwijderen. De Out-File cmdlet slaat de nieuwe versie van het Jobs.csv-bestand op in de $A variabele. De Import-Csv cmdlet importeert het Jobs.csv-bestand en gebruikt de headerparameter om de $Header variabele toe te passen. De $J variabele bevat het geïmporteerde PSCustomObject en geeft het object weer in de PowerShell-console.

Voorbeeld 5: Een aangepast object maken met behulp van een CSV-bestand

In dit voorbeeld ziet u hoe u een aangepast object maakt in PowerShell met behulp van een CSV-bestand.

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

Als u uw Links.csv-bestand wilt maken, gebruikt u de waarden die worden weergegeven in de Get-Content uitvoer.

Met Get-Content de cmdlet wordt het Links.csv-bestand weergegeven. De Import-Csv cmdlet importeert het Links.csv-bestand. De headerparameter geeft de eigenschapsnamen LinkId en TopicTitle op. De objecten worden opgeslagen in de $A variabele. De Get-Member cmdlet toont de eigenschapsnamen uit de headerparameter . De Where-Object cmdlet selecteert objecten met de eigenschap TopicTitle die alias bevat.

Voorbeeld 6: Een CSV importeren waarvoor een waarde ontbreekt

In dit voorbeeld ziet u hoe de cmdlet in PowerShell reageert wanneer de Import-Csv veldnamenrij in een CSV-bestand een null- of lege waarde bevat. Import-Csv Vervangt een standaardnaam voor de ontbrekende veldnamenrij die de eigenschapsnaam wordt van het object dat Import-Csv retourneert.

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

Als u uw Projects.csv-bestand wilt maken, gebruikt u de waarden die worden weergegeven in de uitvoer van Get-Content het voorbeeld.

De Get-Content cmdlet geeft het Projects.csv bestand weer. In de veldnamenrij ontbreekt een waarde tussen ProjectName en Completed. De Import-Csv cmdlet importeert het Projects.csv-bestand en geeft een waarschuwingsbericht weer omdat H1 een standaardheadernaam is. Met de (Import-Csv -Path .\Projects.csv).H1 opdracht worden de H1-eigenschapswaarden opgehaald en wordt een waarschuwing weergegeven.

Parameters

-Delimiter

Hiermee geeft u het scheidingsteken op waarmee de eigenschapswaarden in het CSV-bestand worden gescheiden. De standaardwaarde is een komma (,).

Voer een teken in, zoals een dubbele punt (:). Als u een puntkomma (;) wilt opgeven, plaatst u deze tussen enkele aanhalingstekens. Als u speciale escapetekens wilt opgeven, zoals tab (`t), plaatst u deze tussen dubbele aanhalingstekens.

Als u een ander teken dan het werkelijke tekenreeksscheidingsteken in het bestand opgeeft, Import-Csv kunt u de objecten niet maken op basis van de CSV-tekenreeksen en worden de CSV-tekenreeksen geretourneerd.

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

-Encoding

Hiermee geeft u de codering voor het geïmporteerde CSV-bestand. De standaardwaarde is utf8NoBOM.

De acceptabele waarden voor deze parameter zijn als volgt:

  • ascii: gebruikt de codering voor de ASCII-tekenset (7-bits).
  • ansi: Gebruikt de codering voor de ANSI-codepagina van de huidige cultuur. Deze optie is toegevoegd in PowerShell 7.4.
  • bigendianunicode: Codeert in UTF-16-indeling met behulp van de bytevolgorde big-endian.
  • bigendianutf32: Codeert in UTF-32-indeling met behulp van de bytevolgorde big-endian.
  • oem: maakt gebruik van de standaardcodering voor MS-DOS en consoleprogramma's.
  • unicode: Codeert in UTF-16-indeling met behulp van de bytevolgorde little-endian.
  • utf7: Codeert in UTF-7-indeling.
  • utf8: Codeert in UTF-8-indeling.
  • utf8BOM: Codeert in UTF-8-indeling met Byte Order Mark (BOM)
  • utf8NoBOM: Codeert in UTF-8-indeling zonder Byte Order Mark (BOM)
  • utf32: Codeert in UTF-32-indeling.

Vanaf PowerShell 6.2 staat de coderingsparameter ook numerieke id's toe van geregistreerde codepagina's (zoals -Encoding 1251) of tekenreeksnamen van geregistreerde codepagina's (zoals-Encoding "windows-1251"). Zie de .NET-documentatie voor Encoding.CodePage voor meer informatie.

Vanaf PowerShell 7.4 kunt u de Ansi waarde voor de coderingsparameter gebruiken om de numerieke id voor de ANSI-codepagina van de huidige cultuur door te geven zonder deze handmatig op te geven.

Notitie

UTF-7* wordt niet meer aanbevolen om te gebruiken. Vanaf PowerShell 7.1 wordt een waarschuwing geschreven als u opgeeft utf7 voor de coderingsparameter .

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

Hiermee geeft u een alternatieve kolomkoprij voor het geïmporteerde bestand. De kolomkop bepaalt de eigenschapsnamen van de objecten die door Import-Csvzijn gemaakt.

Voer kolomkoppen in als een door tekens gescheiden lijst. Plaats de koptekenreeks niet tussen aanhalingstekens. Plaats elke kolomkop tussen enkele aanhalingstekens.

Als u minder kolomkoppen invoert dan er gegevenskolommen zijn, worden de resterende gegevenskolommen verwijderd. Als u meer kolomkoppen invoert dan er gegevenskolommen zijn, worden de extra kolomkoppen gemaakt met lege gegevenskolommen.

Wanneer u de parameter Header gebruikt, verwijdert u de oorspronkelijke veldnamenrij uit het CSV-bestand. Import-Csv Anders maakt u een extra object op basis van de items in de veldnamenrij.

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

-LiteralPath

Hiermee geeft u het pad naar het CSV-bestand dat moet worden geïmporteerd. In tegenstelling tot Path wordt de waarde van de parameter LiteralPath precies gebruikt zoals deze is getypt. Er worden geen tekens geïnterpreteerd als jokertekens. Als het pad escapetekens bevat, plaatst u het tussen enkele aanhalingstekens. Enkele aanhalingstekens geven PowerShell aan dat er geen tekens als escapereeksen moeten worden geïnterpreteerd.

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

-Path

Hiermee geeft u het pad naar het CSV-bestand dat moet worden geïmporteerd. U kunt ook een pad naar Import-Csv.

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

-UseCulture

Hiermee gebruikt u het lijstscheidingsteken voor de huidige cultuur als het scheidingsteken voor items. Gebruik de volgende opdracht om het lijstscheidingsteken voor een cultuur te vinden: (Get-Culture).TextInfo.ListSeparator

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

Invoerwaarden

String

U kunt een tekenreeks met een pad naar deze cmdlet doorsluisen.

Uitvoerwaarden

Object

Deze cmdlet retourneert de objecten die worden beschreven door de inhoud in het CSV-bestand.

Notities

PowerShell bevat de volgende aliassen voor Import-Csv:

  • Alle platforms:
    • ipcsv

Omdat de geïmporteerde objecten CSV-versies van het objecttype zijn, worden ze niet herkend en opgemaakt door de opmaakvermeldingen van het PowerShell-type die de niet-CSV-versies van het objecttype opmaken.

Het resultaat van een Import-Csv opdracht is een verzameling tekenreeksen die een tabelachtig aangepast object vormen. Elke rij is een afzonderlijke tekenreeks, zodat u de eigenschap Count van het object kunt gebruiken om de tabelrijen te tellen. De kolommen zijn de eigenschappen van het object en items in de rijen zijn de eigenschapswaarden.

De rij van de kolomkop bepaalt het aantal kolommen en de kolomnamen. De kolomnamen zijn ook de namen van de eigenschappen van de objecten. De eerste rij wordt geïnterpreteerd als de kolomkoppen, tenzij u de parameter Koptekst gebruikt om kolomkoppen op te geven. Als een rij meer waarden heeft dan de veldnamenrij, worden de extra waarden genegeerd.

Als er een waarde ontbreekt in de kolomkoprij of een null- of lege waarde bevat, Import-Csv gebruikt u H gevolgd door een getal voor de ontbrekende kolomkop en eigenschapsnaam.

In het CSV-bestand wordt elk object vertegenwoordigd door een door tekens gescheiden lijst met de eigenschapswaarden van het object. De eigenschapswaarden worden geconverteerd naar tekenreeksen met behulp van de methode ToString() van het object, zodat ze worden vertegenwoordigd door de naam van de eigenschapswaarde. Export-Csv exporteert de methoden van het object niet.

Import-Csv ondersteunt ook de W3C Extended Log-indeling. Lijnen die beginnen met # worden behandeld als opmerkingen en genegeerd, tenzij de opmerking begint met #Fields: en gescheiden lijst met kolomnamen bevat. In dat geval gebruikt de cmdlet deze kolomnamen. Dit is de standaardindeling voor Windows IIS en andere webserverlogboeken. Zie Uitgebreide logboekbestandsindeling voor meer informatie.