Import-Csv
Hiermee maakt u tabelachtige aangepaste objecten op basis van de items in een CSV-bestand (door tekens gescheiden waarden).
Syntaxis
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 cmdlet Import-Csv
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 worden gegenereerd door de cmdlet Export-Csv
.
U kunt de parameters van de Import-Csv
-cmdlet gebruiken om de kolomkoprij en het itemscheidingsteken op te geven, of direct Import-Csv
om het lijstscheidingsteken voor de huidige cultuur te gebruiken als het scheidingsteken voor items.
U kunt ook de cmdlets ConvertTo-Csv
en ConvertFrom-Csv
gebruiken om objecten te converteren naar CSV-tekenreeksen (en terug). Deze cmdlets zijn hetzelfde als de Export-CSV
en Import-Csv
cmdlets, behalve dat ze werken met gegevens uit de pijplijn in plaats van vanuit 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 ondersteunt Import-Csv
nu de W3C Extended Log-bestandsindeling.
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
De cmdlet Get-Process
verzendt procesobjecten in de pijplijn naar de Export-Csv
. De cmdlet Export-Csv
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 variabele $P
. 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 pijplijn verzonden naar de Format-Table
-cmdlet 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 cmdlet Export-Csv
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 variabele $P
. Als u een variabele wilt $P
, 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 cmdlet Import-Csv
gebruikt met de parameter UseCulture.
(Get-Culture).TextInfo.ListSeparator
Get-Process | Export-Csv -Path .\Processes.csv -UseCulture
Import-Csv -Path .\Processes.csv -UseCulture
De cmdlet Get-Culture
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 cmdlet Export-Csv
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 parameter Header van Import-Csv
kunt gebruiken 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]
Met de cmdlet Start-Job
wordt een achtergrondtaak gestart waarop Get-Process
wordt uitgevoerd. Er wordt een taakobject naar de pijplijn verzonden naar de cmdlet Export-Csv
en geconverteerd naar een CSV-tekenreeks. De parameter NoTypeInformation verwijdert de typeinformatieheader uit csv-uitvoer en is optioneel in PowerShell v6 en hoger. De variabele $Header
bevat een aangepaste header die de volgende standaardwaarden vervangt: HasMoreData, JobStateInfo, PSBeginTime, PSEndTimeen PSJobTypeName. De variabele $A
maakt gebruik van 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. Met de Out-File
-cmdlet wordt de nieuwe versie van het Jobs.csv-bestand opgeslagen in de variabele $A
. De cmdlet Import-Csv
importeert het Jobs.csv-bestand en gebruikt de parameter Header om de $Header
variabele toe te passen. De variabele $J
bevat de 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 de cmdlet Get-Content
wordt het Links.csv-bestand weergegeven. Met de cmdlet Import-Csv
wordt het Links.csv-bestand geïmporteerd. De parameter Header specificeert de eigenschapsnamen LinkId en TopicTitle. De objecten worden opgeslagen in de variabele $A
. De Get-Member
cmdlet toont de eigenschapsnamen uit de parameter Header. De cmdlet Where-Object
selecteert objecten met de eigenschap TopicTitle die aliasbevat.
Voorbeeld 6: Een CSV importeren waarvoor een waarde ontbreekt
In dit voorbeeld ziet u hoe de cmdlet Import-Csv
in PowerShell reageert wanneer de 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 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
Met de cmdlet Get-Content
wordt het Projects.csv
-bestand weergegeven. In de veldnamenrij ontbreekt een waarde tussen ProjectName en Voltooide. De Import-Csv
-cmdlet importeert het Projects.csv
-bestand en geeft een waarschuwingsbericht weer omdat H1- een standaardkopnaam is.
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
de objecten niet kunt maken op basis van de CSV-tekenreeksen en de volledige CSV-tekenreeksen retourneert.
Type: | Char |
Position: | 1 |
Default value: | comma (,) |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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
: maakt gebruik van 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 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 parameter Coderings- 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.CodePagevoor 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 utf7
opgeeft voor de parameter codering.
Type: | Encoding |
Geaccepteerde waarden: | ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Position: | Named |
Default value: | UTF8NoBOM |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Header
Hiermee geeft u een alternatieve kolomkoprij voor het geïmporteerde bestand. De kolomkop bepaalt de eigenschapsnamen van de objecten die door Import-Csv
zijn 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. Anders maakt Import-Csv
een extra object op basis van de items in de veldnamenrij.
Type: | String[] |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-LiteralPath
Hiermee geeft u het pad naar het CSV-bestand dat moet worden geïmporteerd. In tegenstelling tot pad, wordt de waarde van de parameter LiteralPath exact 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[] |
Aliassen: | PSPath, LP |
Position: | Named |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-Path
Hiermee geeft u het pad naar het CSV-bestand dat moet worden geïmporteerd.
U kunt ook een pad naar Import-Csv
doorsluisen.
Type: | String[] |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | 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 |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
Invoerwaarden
U kunt een tekenreeks met een pad naar deze cmdlet doorsluisen.
Uitvoerwaarden
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 waarmee de niet-CSV-versies van het objecttype worden opgemaakt.
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 rij kolomkoppen of een null- of lege waarde bevat, gebruikt Import-Csv
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 ToString() methode 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. Regels die beginnen met het hash-teken (#
) worden behandeld als opmerkingen en genegeerd, tenzij de opmerking begint met #Fields:
en een lijst met kolomnamen bevat met scheidingstekens. In dat geval gebruikt de cmdlet deze kolomnamen. Dit is de standaardindeling voor Windows IIS en andere webserverlogboeken. Zie uitgebreide logboekbestandsindelingvoor meer informatie.