Sdílet prostřednictvím


Import-Csv

Vytvoří vlastní objekty podobné tabulce z položek v souboru hodnot oddělených znakem (CSV).

Syntaxe

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

Rutina Import-Csv vytvoří vlastní objekty podobné tabulce z položek v souborech CSV. Každý sloupec v souboru CSV se stane vlastností vlastního objektu a položky v řádcích se stanou hodnotami vlastností. Import-Csv funguje na jakémkoli souboru CSV, včetně souborů generovaných rutinou Export-Csv.

Pomocí parametrů rutiny Import-Csv můžete zadat řádek záhlaví sloupce a oddělovač položek, nebo můžete přesměrovat Import-Csv, aby použil oddělovač seznamu podle aktuální jazykové verze jako oddělovač položek.

Pomocí rutin ConvertTo-Csv a ConvertFrom-Csv můžete také převést objekty na řetězce CSV (a zpět). Tyto rutiny jsou stejné jako rutiny Export-CSV a Import-Csv s tím rozdílem, že pracují s daty z kanálu místo ze souborů.

Pokud položka řádku záhlaví v souboru CSV obsahuje prázdnou nebo nulovou hodnotu, PowerShell vloží výchozí název řádku záhlaví a zobrazí zprávu s upozorněním.

Počínaje PowerShellem 6.0 teď Import-Csv podporuje formát souborů protokolu W3C Extended.

Příklady

Příklad 1: Import objektů procesu

Tento příklad ukazuje, jak exportovat a pak importovat soubor CSV procesních objektů.

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

Rutina Get-Process odesílá objekty procesu do kanálu do Export-Csv. Rutina Export-Csv převede objekty procesu na řetězce CSV a uloží řetězce do souboru Processes.csv. Rutina Import-Csv importuje řetězce CSV ze souboru Processes.csv. Řetězce jsou uloženy v proměnné $P. Proměnná $P se odešle do pipeline k cmdletu Get-Member, který zobrazuje vlastnosti importovaných řetězců CSV. Proměnná $P se odešle dolů potrubím do rutiny Format-Table, která poté zobrazí objekty.

Příklad 2: Určení oddělovače

Tento příklad ukazuje, jak použít parametr Oddělovač příkazového prostředku Import-Csv.

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

Rutina cmdlet Get-Process odesílá objekty procesu prostřednictvím kanálu do Export-Csv. Rutina Export-Csv převede objekty procesu na řetězce CSV a uloží řetězce do souboru Processes.csv. Parametr Oddělovač slouží k určení dvojtečkového oddělovače. Rutina Import-Csv importuje řetězce CSV ze souboru Processes.csv. Řetězce jsou uloženy v proměnné $P. Proměnná $P je odeslána dolů potrubím do rutiny Format-Table.

Příklad 3: Určení aktuální jazykové verze oddělovače

Tento příklad ukazuje, jak použít rutinu Import-Csv s parametrem UseCulture.

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

Cmdlet Get-Culture používá vnořené vlastnosti TextInfo a ListSeparator k získání výchozího oddělovače seznamu podle aktuálního nastavení kultury. Rutina Get-Process odesílá objekty procesu do kanálu k Export-Csv. Rutina Export-Csv převede objekty procesu na řetězce CSV a uloží řetězce do souboru Processes.csv. Parametr UseCulture používá výchozí oddělovač seznamu aktuální kultury. Rutina Import-Csv importuje řetězce CSV ze souboru Processes.csv.

Příklad 4: Změna názvů vlastností v importovaném objektu

Tento příklad ukazuje, jak pomocí parametru HeaderImport-Csv změnit názvy vlastností ve výsledném importovaném objektu.

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]

Cmdlet Start-Job spustí úlohu na pozadí, která běží Get-Process. Objekt úlohy je odeslán do potrubí ke cmdletu Export-Csv a převeden na CSV řetězec. Parametr NoTypeInformation odebere hlavičku informací o typu z výstupu CSV a je volitelná v PowerShellu verze 6 a vyšší. Proměnná $Header obsahuje vlastní hlavičku, která nahrazuje následující výchozí hodnoty: HasMoreData, JobStateInfo, PSBeginTime, PSEndTimea PSJobTypeName. Proměnná $A používá rutinu Get-Content k získání řetězce CSV ze souboru Jobs.csv. Proměnná $A slouží k odebrání výchozí hlavičky ze souboru. Rutina Out-File uloží novou verzi souboru Jobs.csv do proměnné $A. Rutina Import-Csv naimportuje soubor Jobs.csv a použije parametr Header k použití proměnné $Header. Proměnná $J obsahuje importovaný PSCustomObject a zobrazí objekt v konzole PowerShellu.

Příklad 5: Vytvoření vlastního objektu pomocí souboru CSV

Tento příklad ukazuje, jak vytvořit vlastní objekt v PowerShellu pomocí souboru CSV.

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

K vytvoření Links.csv souboru použijte hodnoty zobrazené ve výstupu Get-Content.

Cmdlet Get-Content zobrazí soubor Links.csv. Rutina Import-Csv importuje soubor Links.csv. Parametr hlavičky určuje názvy vlastností LinkId a TopicTitle. Objekty jsou uloženy v proměnné $A. Rutina zobrazuje názvy vlastností z parametru hlavičky . Rutina vybere objekty s vlastností TopicTitle, které zahrnují alias.

Příklad 6: Import souboru CSV, který nemá hodnotu

Tento příklad ukazuje, jak Import-Csv rutina v PowerShellu reaguje, když řádek záhlaví v souboru CSV obsahuje hodnotu null nebo prázdnou hodnotu. Import-Csv nahradí výchozí název chybějícího řádku záhlaví, který se stane názvem vlastnosti objektu, který Import-Csv vrátí.

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

Rutina Get-Content zobrazí soubor Projects.csv. V řádku záhlaví chybí hodnota mezi ProjectName a Dokončeno. Rutina Import-Csv importuje soubor Projects.csv a zobrazí zprávu s upozorněním, protože H1 je výchozí název záhlaví.

Parametry

-Delimiter

Určuje oddělovač, který odděluje hodnoty vlastností v souboru CSV. Výchozí hodnota je čárka (,).

Zadejte znak, například dvojtečku (:). Pokud chcete zadat středník (;), uzavřete ho do jednoduchých uvozovek. Pokud chcete zadat speciální znaky, které vyžadují únikové sekvence, jako je například tabulátor (`t), uzavřete každý z nich do dvojitých uvozovek.

Pokud v souboru zadáte jiný znak než skutečný oddělovač řetězců, Import-Csv nemůže vytvořit objekty z řetězců CSV a vrátit úplné řetězce CSV.

Typ:Char
Position:1
Default value:comma (,)
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Encoding

Určuje kódování importovaného souboru CSV. Výchozí hodnota je utf8NoBOM.

Přijatelné hodnoty pro tento parametr jsou následující:

  • ascii: Používá kódování znakové sady ASCII (7bitová).
  • ansi: Používá kódování pro pro aktuální kulturní kódovou stránku ANSI. Tato možnost byla přidána v PowerShellu 7.4.
  • bigendianunicode: Kóduje ve formátu UTF-16 pomocí pořadí velkých bajtů.
  • bigendianutf32: Kóduje ve formátu UTF-32 pomocí big-endian pořadí bajtů.
  • oem: Používá výchozí kódování pro MS-DOS a konzolové programy.
  • unicode: Kóduje ve formátu UTF-16 pomocí pořadí malých bajtů.
  • utf7: Kóduje ve formátu UTF-7.
  • utf8: Kóduje ve formátu UTF-8.
  • utf8BOM: Kódování ve formátu UTF-8 pomocí značky pořadí bajtů (BOM)
  • utf8NoBOM: Kódování ve formátu UTF-8 bez značky pořadí bajtů (BOM)
  • utf32: Kóduje ve formátu UTF-32.

Počínaje PowerShellem 6.2 umožňuje parametr Encoding také číselné ID registrovaných znakových stránek (například -Encoding 1251) nebo názvy řetězců registrovaných znakových stránek (například -Encoding "windows-1251"). Další informace naleznete v dokumentaci .NET pro Encoding.CodePage.

Od verze PowerShell 7.4 můžete použít hodnotu Ansi parametru Encoding a předat číslo ID pro znakovou stránku ANSI aktuálního jazykového prostředí, aniž byste ji museli zadávat ručně.

Poznámka

UTF-7* se už nedoporučuje používat. Od PowerShellu 7.1 se zapíše upozornění, pokud pro parametr Encoding zadáte utf7.

Typ:Encoding
Přípustné hodnoty:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:UTF8NoBOM
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Header

Určuje řádek záhlaví alternativního sloupce pro importovaný soubor. Záhlaví sloupce určuje názvy vlastností objektů vytvořených Import-Csv.

Zadejte záhlaví sloupců jako seznam oddělený znakem. Neuzavírejte řetězec záhlaví do uvozovek. Uzavřete záhlaví každého sloupce do jednoduchých uvozovek.

Pokud zadáte méně záhlaví sloupců, než jsou sloupce dat, zbývající datové sloupce se zahodí. Pokud zadáte více záhlaví sloupců, než jsou datové sloupce, vytvoří se další záhlaví sloupců s prázdnými datovými sloupci.

Při použití parametru Header odstraňte původní řádek záhlaví ze souboru CSV. V opačném případě Import-Csv vytvoří další objekt z položek v řádku záhlaví.

Typ:String[]
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-LiteralPath

Určuje cestu k souboru CSV, který se má importovat. Na rozdíl od Pathse hodnota parametru LiteralPath používá přesně tak, jak je zadaný. Žádné znaky nejsou interpretovány jako zástupné znaky. Pokud cesta obsahuje escape znaky, uzavřete ji do jednoduchých uvozovek. Jednoduché uvozovky říkají PowerShellu, aby nepřekládaly žádné znaky jako řídicí sekvence.

Typ:String[]
Aliasy:PSPath, LP
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-Path

Určuje cestu k souboru CSV, který se má importovat. Můžete také přesměrovat cestu k Import-Csv.

Typ:String[]
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-UseCulture

Použije oddělovač seznamu pro aktuální kulturu jako oddělovač položek. K vyhledání oddělovače seznamu pro kulturu použijte následující příkaz: (Get-Culture).TextInfo.ListSeparator.

Typ:SwitchParameter
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

String

Můžete předat řetězec, který obsahuje cestu, této rutině příkazového řádku.

Výstupy

Object

Tato rutina vrátí objekty popsané obsahem v souboru CSV.

Poznámky

PowerShell obsahuje následující aliasy pro Import-Csv:

  • Všechny platformy:
    • ipcsv

Vzhledem k tomu, že importované objekty jsou verzemi CSV typu objektu, nerozpoznají se a formátují položkami formátování typu PowerShellu, které formátují jiné verze než CSV typu objektu.

Výsledkem příkazu Import-Csv je kolekce řetězců, které tvoří vlastní objekt podobný tabulce. Každý řádek je samostatný řetězec, takže k počítání řádků tabulky můžete použít vlastnost Count objektu. Sloupce jsou vlastnosti objektu a položek v řádcích jsou hodnoty vlastností.

Řádek záhlaví sloupce určuje počet sloupců a názvy sloupců. Názvy sloupců jsou také názvy vlastností objektů. První řádek se interpretuje jako záhlaví sloupců, pokud k určení záhlaví sloupců nepoužíváte parametr Header. Pokud některý řádek obsahuje více hodnot než řádek záhlaví, budou další hodnoty ignorovány.

Pokud řádek záhlaví sloupce neobsahuje hodnotu nebo obsahuje hodnotu null nebo prázdnou hodnotu, Import-Csv použije H následované číslem pro záhlaví chybějícího sloupce a název vlastnosti.

V souboru CSV je každý objekt reprezentován seznamem vlastností oddělených znakem hodnot objektu. Hodnoty vlastností jsou převedeny na řetězce pomocí ToString() metoda objektu, takže jsou reprezentovány názvem hodnoty vlastnosti. Export-Csv neexportuje metody objektu.

Import-Csv také podporuje formát rozšířeného protokolu W3C. Řádky začínající znakem hash (#) se považují za komentáře a ignorují se, pokud komentář nezačíná #Fields: a neobsahuje seznam názvů sloupců s oddělovači. V takovém případě rutina používá tyto názvy sloupců. Toto je standardní formát pro službu Windows IIS a další logy webového serveru. Další informace naleznete v tématu Rozšířený formát souboru protokolu.