Udostępnij za pośrednictwem


Import-Csv

Tworzy obiekty niestandardowe przypominające tabelę na podstawie elementów w pliku wartości rozdzielanej znakami (CSV).

Składnia

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

Opis

Polecenie Import-Csv cmdlet tworzy obiekty niestandardowe przypominające tabelę na podstawie elementów w plikach CSV. Każda kolumna w pliku CSV staje się właściwością obiektu niestandardowego, a elementy w wierszach stają się wartościami właściwości. Import-Csv działa na dowolnym pliku CSV, w tym na plikach generowanych przez Export-Csv polecenie cmdlet .

Możesz użyć parametrów Import-Csv polecenia cmdlet, aby określić wiersz nagłówka kolumny i ogranicznik elementu lub bezpośrednio Import-Csv użyć separatora listy dla bieżącej kultury jako ogranicznika elementu.

Można również użyć ConvertTo-Csv poleceń cmdlet i ConvertFrom-Csv , aby przekonwertować obiekty na ciągi CSV (i z powrotem). Te polecenia cmdlet są takie same jak Export-CSV polecenia cmdlet i Import-Csv , z tą różnicą, że nie zajmują się plikami.

Jeśli wpis wiersza nagłówka w pliku CSV zawiera pustą lub null wartość, program PowerShell wstawia domyślną nazwę wiersza nagłówka i wyświetla komunikat ostrzegawczy.

Począwszy od programu PowerShell 6.0, Import-Csv obsługuje teraz rozszerzony format pliku dziennika W3C.

Przykłady

Przykład 1. Importowanie obiektów procesu

W tym przykładzie pokazano, jak wyeksportować, a następnie zaimportować plik CSV obiektów procesu.

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

Polecenie Get-Process cmdlet wysyła obiekty procesu w dół potoku do elementu Export-Csv. Polecenie Export-Csv cmdlet konwertuje obiekty procesu na ciągi CSV i zapisuje ciągi w pliku Processes.csv. Polecenie Import-Csv cmdlet importuje ciągi CSV z pliku Processes.csv. Ciągi są zapisywane w zmiennej $P . Zmienna $P jest wysyłana w dół potoku do Get-Member polecenia cmdlet, które wyświetla właściwości zaimportowanych ciągów CSV. Zmienna $P jest wysyłana w dół potoku Format-Table do polecenia cmdlet i wyświetla obiekty.

Przykład 2. Określanie ogranicznika

W tym przykładzie pokazano, jak użyć parametru Import-Csv ogranicznika polecenia cmdlet.

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

Polecenie Get-Process cmdlet wysyła obiekty przetwarzania w dół potoku do elementu Export-Csv. Polecenie Export-Csv cmdlet konwertuje obiekty procesu na ciągi CSV i zapisuje ciągi w pliku Processes.csv. Parametr ogranicznika służy do określania ogranicznika dwukropka. Polecenie Import-Csv cmdlet importuje ciągi CSV z pliku Processes.csv. Ciągi są zapisywane w zmiennej $P . Zmienna do $P zmiennej jest wysyłana w dół potoku Format-Table do polecenia cmdlet.

Przykład 3. Określ bieżącą kulturę ogranicznika

W tym przykładzie Import-Csv pokazano, jak używać polecenia cmdlet z parametrem UseCulture .

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

Polecenie Get-Culture cmdlet używa zagnieżdżonych właściwości TextInfo i ListSeparator , aby uzyskać domyślny separator listy bieżącej kultury. Polecenie Get-Process cmdlet wysyła obiekty przetwarzania w dół potoku do elementu Export-Csv. Polecenie Export-Csv cmdlet konwertuje obiekty procesu na ciągi CSV i zapisuje ciągi w pliku Processes.csv. Parametr UseCulture używa domyślnego separatora listy bieżącej kultury. Polecenie Import-Csv cmdlet importuje ciągi CSV z pliku Processes.csv.

Przykład 4. Zmienianie nazw właściwości w zaimportowanym obiekcie

W tym przykładzie pokazano, jak za pomocą parametru Import-Csv Header zmienić nazwy właściwości w wynikowym importowanym obiekcie.

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]

Polecenie Start-Job cmdlet uruchamia zadanie w tle z uruchomionym poleceniem Get-Process. Obiekt zadania jest wysyłany w dół potoku Export-Csv do polecenia cmdlet i konwertowany na ciąg CSV. Parametr NoTypeInformation usuwa nagłówek informacji o typie z danych wyjściowych CSV i jest opcjonalny w programie PowerShell w wersji 6 i nowszych. Zmienna $Header zawiera nagłówek niestandardowy, który zastępuje następujące wartości domyślne: HasMoreData, JobStateInfo, PSBeginTime, PSEndTime i PSJobTypeName. Zmienna $A używa Get-Content polecenia cmdlet , aby pobrać ciąg CSV z pliku Jobs.csv. Zmienna $A jest używana do usuwania domyślnego nagłówka z pliku. Polecenie Out-File cmdlet zapisuje nową wersję pliku Jobs.csv w zmiennej $A . Polecenie Import-Csv cmdlet importuje plik Jobs.csv i używa parametru Header do zastosowania zmiennej $Header . Zmienna $J zawiera zaimportowany obiekt PSCustomObject i wyświetla obiekt w konsoli programu PowerShell.

Przykład 5. Tworzenie obiektu niestandardowego przy użyciu pliku CSV

W tym przykładzie pokazano, jak utworzyć obiekt niestandardowy w programie PowerShell przy użyciu pliku 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

Aby utworzyć plik Links.csv, użyj wartości wyświetlanych w danych wyjściowych Get-Content .

Polecenie Get-Content cmdlet wyświetla plik Links.csv. Polecenie Import-Csv cmdlet importuje plik Links.csv. Parametr Header określa nazwy właściwości LinkId i TopicTitle. Obiekty są przechowywane w zmiennej $A . Polecenie Get-Member cmdlet wyświetla nazwy właściwości z parametru Header . Polecenie Where-Object cmdlet wybiera obiekty z właściwością TopicTitle , która zawiera alias.

Przykład 6. Importowanie woluminu CSV, który nie ma wartości

W tym przykładzie pokazano, jak Import-Csv polecenie cmdlet w programie PowerShell reaguje, gdy wiersz nagłówka w pliku CSV zawiera wartość null lub pustą. Import-Csv zastępuje domyślną nazwę brakującego wiersza nagłówka, który staje się nazwą właściwości zwracanego obiektu Import-Csv .

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

Aby utworzyć plik Projects.csv, użyj wartości przedstawionych w danych wyjściowych przykładu Get-Content .

Polecenie Get-Content cmdlet wyświetla plik Projects.csv. W wierszu nagłówka brakuje wartości między wartością ProjectName i Completed. Polecenie Import-Csv cmdlet importuje plik Projects.csv i wyświetla komunikat ostrzegawczy, ponieważ H1 jest domyślną nazwą nagłówka. Polecenie (Import-Csv -Path .\Projects.csv).H1 pobiera wartości właściwości H1 i wyświetla ostrzeżenie.

Parametry

-Delimiter

Określa ogranicznik oddzielający wartości właściwości w pliku CSV. Wartość domyślna to przecinek (,).

Wprowadź znak, taki jak dwukropek (:). Aby określić średnik (;) ujęć go w pojedynczy cudzysłów. Aby określić znaki specjalne, takie jak tabulator (`t), należy je ująć w znaki podwójnego cudzysłowu.

Jeśli określisz znak inny niż rzeczywisty ogranicznik ciągu w pliku, Import-Csv nie można utworzyć obiektów z ciągów CSV i zwróci ciągi CSV.

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

-Encoding

Określa kodowanie zaimportowanych plików CSV. Domyślna wartość to utf8NoBOM.

Dopuszczalne wartości tego parametru są następujące:

  • ascii: używa kodowania dla zestawu znaków ASCII (7-bitowych).
  • ansi: używa kodowania dla strony kodowej ANSI bieżącej kultury. Ta opcja została dodana w programie PowerShell 7.4.
  • bigendianunicode: Koduje w formacie UTF-16 przy użyciu kolejności bajtów big-endian.
  • bigendianutf32: Koduje w formacie UTF-32 przy użyciu kolejności bajtów big-endian.
  • oem: używa domyślnego kodowania dla programów MS-DOS i konsoli.
  • unicode: Koduje w formacie UTF-16 przy użyciu kolejności bajtów little-endian.
  • utf7: Koduje w formacie UTF-7.
  • utf8: Koduje w formacie UTF-8.
  • utf8BOM: Koduje w formacie UTF-8 za pomocą języka Byte Order Mark (BOM)
  • utf8NoBOM: Koduje w formacie UTF-8 bez znaku kolejności bajtów (BOM)
  • utf32: Koduje w formacie UTF-32.

Począwszy od programu PowerShell 6.2, parametr Kodowanie umożliwia również numeryczne identyfikatory zarejestrowanych stron kodu (takich jak ) lub nazwy ciągów zarejestrowanych stron kodu (na przykład -Encoding 1251-Encoding "windows-1251"). Aby uzyskać więcej informacji, zobacz dokumentację platformy .NET dotyczącą pliku Encoding.CodePage.

Począwszy od programu PowerShell 7.4, można użyć Ansi wartości parametru Kodowanie , aby przekazać identyfikator liczbowy dla strony kodowej ANSI bieżącej kultury bez konieczności ręcznego określania go.

Uwaga

UtF-7* nie jest już zalecane do użycia. Zgodnie z programem PowerShell 7.1 ostrzeżenie jest zapisywane w przypadku określenia utf7 parametru Kodowanie .

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

Określa alternatywny wiersz nagłówka kolumny dla zaimportowanego pliku. Nagłówek kolumny określa nazwy właściwości obiektów utworzonych przez Import-Csvelement .

Wprowadź nagłówki kolumn jako listę rozdzielaną znakami. Nie należy ująć ciągu nagłówka w cudzysłów. Ujęć każdy nagłówek kolumny w pojedynczy cudzysłów.

Jeśli wprowadzisz mniej nagłówków kolumn niż istnieją kolumny danych, pozostałe kolumny danych zostaną odrzucone. Jeśli wprowadzisz więcej nagłówków kolumn niż istnieją kolumny danych, dodatkowe nagłówki kolumn zostaną utworzone z pustymi kolumnami danych.

W przypadku korzystania z parametru Header usuń oryginalny wiersz nagłówka z pliku CSV. Import-Csv W przeciwnym razie tworzy dodatkowy obiekt z elementów w wierszu nagłówka.

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

-LiteralPath

Określa ścieżkę do pliku CSV do zaimportowania. W przeciwieństwie do ścieżki, wartość parametru LiteralPath jest używana dokładnie tak, jak jest typowana. Znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w pojedynczy cudzysłów. Pojedyncze znaki cudzysłowu informują program PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.

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

-Path

Określa ścieżkę do pliku CSV do zaimportowania. Możesz również przekazać ścieżkę do Import-Csv.

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

-UseCulture

Używa separatora listy dla bieżącej kultury jako ogranicznika elementu. Aby znaleźć separator listy dla kultury, użyj następującego polecenia: (Get-Culture).TextInfo.ListSeparator.

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

Dane wejściowe

String

Możesz potokować ciąg zawierający ścieżkę do tego polecenia cmdlet.

Dane wyjściowe

Object

To polecenie cmdlet zwraca obiekty opisane przez zawartość w pliku CSV.

Uwagi

Program PowerShell zawiera następujące aliasy dla programu Import-Csv:

  • Wszystkie platformy:
    • ipcsv

Ponieważ importowane obiekty są wersjami CSV typu obiektu, nie są rozpoznawane i formatowane przez wpisy formatowania typu programu PowerShell, które formatują wersje obiektów innych niż CSV.

Wynikiem Import-Csv polecenia jest kolekcja ciągów, które tworzą obiekt niestandardowy przypominający tabelę. Każdy wiersz jest oddzielnym ciągiem, więc można użyć właściwości Count obiektu, aby zliczyć wiersze tabeli. Kolumny są właściwościami obiektu, a elementy w wierszach są wartościami właściwości.

Wiersz nagłówka kolumny określa liczbę kolumn i nazwy kolumn. Nazwy kolumn są również nazwami właściwości obiektów. Pierwszy wiersz jest interpretowany jako nagłówki kolumn, chyba że używasz parametru Header do określania nagłówków kolumn. Jeśli jakikolwiek wiersz zawiera więcej wartości niż wiersz nagłówka, dodatkowe wartości są ignorowane.

Jeśli w wierszu nagłówka kolumny brakuje wartości lub zawiera wartość null lub pustą, Import-Csv użyje wartości H , a następnie liczby dla brakującego nagłówka kolumny i nazwy właściwości.

W pliku CSV każdy obiekt jest reprezentowany przez rozdzielaną znakami listę wartości właściwości obiektu. Wartości właściwości są konwertowane na ciągi przy użyciu metody ToString() obiektu, więc są one reprezentowane przez nazwę wartości właściwości. Export-Csv nie eksportuje metod obiektu.

Import-Csv obsługuje również format dziennika rozszerzonego W3C. Wiersze rozpoczynające się od # są traktowane jako komentarze i ignorowane, chyba że komentarz zaczyna się od #Fields: i zawiera rozdzielaną listę nazw kolumn. W takim przypadku polecenie cmdlet używa tych nazw kolumn. Jest to standardowy format dla usług IIS systemu Windows i innych dzienników serwera sieci Web. Aby uzyskać więcej informacji, zobacz Rozszerzony format pliku dziennika.