다음을 통해 공유


Import-Csv

CSV(문자로 구분된 값) 파일의 항목에서 테이블과 유사한 사용자 지정 개체를 만듭니다.

구문

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

Import-Csv cmdlet은 CSV 파일의 항목에서 테이블과 유사한 사용자 지정 개체를 만듭니다. CSV 파일의 각 열은 사용자 지정 개체의 속성이 되고 행의 항목은 속성 값이 됩니다. Import-Csv Export-Csv cmdlet에서 생성된 파일을 포함하여 모든 CSV 파일에서 작동합니다.

Import-Csv cmdlet의 매개 변수를 사용하여 열 머리글 행과 항목 구분 기호를 지정하거나 현재 문화권의 목록 구분 기호를 항목 구분 기호로 사용하도록 Import-Csv 직접 지정할 수 있습니다.

ConvertTo-CsvConvertFrom-Csv cmdlet을 사용하여 개체를 CSV 문자열(및 뒤로)으로 변환할 수도 있습니다. 이러한 cmdlet은 파일 대신 파이프라인의 데이터로 작동한다는 점을 제외하고 Export-CsvImport-Csv cmdlet과 동일합니다.

CSV 파일의 머리글 행 항목에 빈 값 또는 null 값이 포함된 경우 PowerShell은 기본 헤더 행 이름을 삽입하고 경고 메시지를 표시합니다.

PowerShell 6.0부터 Import-Csv 이제 W3C 확장 로그 파일 형식을 지원합니다.

예제

예제 1: 프로세스 개체 가져오기

이 예제에서는 프로세스 개체의 CSV 파일을 내보내고 가져오는 방법을 보여 줍니다.

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

Get-Process cmdlet은 프로세스 개체를 파이프라인 아래로 Export-Csv보냅니다. Export-Csv cmdlet은 프로세스 개체를 CSV 문자열로 변환하고 문자열을 Processes.csv 파일에 저장합니다. Import-Csv cmdlet은 Processes.csv 파일에서 CSV 문자열을 가져옵니다. 문자열은 $P 변수에 저장됩니다. $P 변수는 가져온 CSV 문자열의 속성을 표시하는 Get-Member cmdlet으로 파이프라인 아래로 전송됩니다. $P 변수는 파이프라인을 Format-Table cmdlet으로 보내고 개체를 표시합니다.

예제 2: 구분 기호 지정

이 예제에서는 cmdlet의 Import-Csv 매개 변수를 사용하는 방법을 보여줍니다.

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

Get-Process cmdlet은 프로세스 개체를 파이프라인 아래로 보내 Export-Csv. Export-Csv cmdlet은 프로세스 개체를 CSV 문자열로 변환하고 문자열을 Processes.csv 파일에 저장합니다. 구분 기호 매개 변수는 콜론 구분 기호를 지정하는 데 사용됩니다. Import-Csv cmdlet은 Processes.csv 파일에서 CSV 문자열을 가져옵니다. 문자열은 $P 변수에 저장됩니다. $P 변수는 파이프라인을 Format-Table cmdlet으로 보냅니다.

예제 3: 구분 기호의 현재 문화권 지정

이 예제에서는 Import-Csv 매개 변수와 함께 cmdlet을 사용하는 방법을 보여줍니다.

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

Get-Culture cmdlet은 TextInfo ListSeparator 중첩된 속성을 사용하여 현재 문화권의 기본 목록 구분 기호를 가져옵니다. Get-Process cmdlet은 프로세스 개체를 파이프라인 아래로 보내 Export-Csv. Export-Csv cmdlet은 프로세스 개체를 CSV 문자열로 변환하고 문자열을 Processes.csv 파일에 저장합니다. UseCulture 매개 변수는 현재 문화권의 기본 목록 구분 기호를 사용합니다. Import-Csv cmdlet은 Processes.csv 파일에서 CSV 문자열을 가져옵니다.

예제 4: 가져온 개체의 속성 이름 변경

이 예제에서는 Import-Csv 매개 변수를 사용하여 가져온 개체의 속성 이름을 변경하는 방법을 보여줍니다.

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]

Start-Job cmdlet은 Get-Process실행하는 백그라운드 작업을 시작합니다. 작업 개체는 파이프라인을 Export-Csv cmdlet으로 보내고 CSV 문자열로 변환됩니다. NoTypeInformation 매개 변수는 CSV 출력에서 형식 정보 헤더를 제거하고 PowerShell v6 이상에서는 선택 사항입니다. $Header 변수에는 HasMoreData, JobStateInfo, PSBeginTime, PSEndTimePSJobTypeName대체하는 사용자 지정 헤더가 포함되어 있습니다. $A 변수는 Get-Content cmdlet을 사용하여 Jobs.csv 파일에서 CSV 문자열을 가져옵니다. $A 변수는 파일에서 기본 헤더를 제거하는 데 사용됩니다. Out-File cmdlet은 새 버전의 Jobs.csv 파일을 $A 변수에 저장합니다. Import-Csv cmdlet은 Jobs.csv 파일을 가져오고 Header 매개 변수를 사용하여 $Header 변수를 적용합니다. $J 변수는 가져온 PSCustomObject 포함하고 PowerShell 콘솔에 개체를 표시합니다.

예제 5: CSV 파일을 사용하여 사용자 지정 개체 만들기

이 예제에서는 CSV 파일을 사용하여 PowerShell에서 사용자 지정 개체를 만드는 방법을 보여 줍니다.

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

Links.csv 파일을 만들려면 Get-Content 출력에 표시된 값을 사용합니다.

Get-Content cmdlet은 Links.csv 파일을 표시합니다. Import-Csv cmdlet은 Links.csv 파일을 가져옵니다. Header 매개 변수는 LinkId TopicTitle 속성 이름을 지정합니다. 개체는 $A 변수에 저장됩니다. Get-Member cmdlet은 Header 매개 변수의 속성 이름을 표시합니다. Where-Object cmdlet은 별칭포함하는 TopicTitle 속성이 있는 개체를 선택합니다.

예제 6: 값이 누락된 CSV 가져오기

이 예제에서는 CSV 파일의 헤더 행에 null 또는 빈 값이 포함되어 있을 때 PowerShell의 Import-Csv cmdlet이 응답하는 방법을 보여 줍니다. Import-Csv 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 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

Get-Content cmdlet은 Projects.csv 파일을 표시합니다. 머리글 행에 ProjectNameCompleted사이의 값이 없습니다. Import-Csv cmdlet은 Projects.csv 파일을 가져오고 H1 기본 헤더 이름이기 때문에 경고 메시지를 표시합니다.

매개 변수

-Delimiter

CSV 파일의 속성 값을 구분하는 구분 기호를 지정합니다. 기본값은 쉼표(,)입니다.

콜론(:)과 같은 문자를 입력합니다. 세미콜론(;)을 지정하려면 작은따옴표로 묶습니다. tab(`t)과 같이 이스케이프된 특수 문자를 지정하려면 큰따옴표로 묶습니다.

파일에서 실제 문자열 구분 기호 이외의 문자를 지정하는 경우 Import-Csv CSV 문자열에서 개체를 만들 수 없으며 전체 CSV 문자열을 반환합니다.

형식:Char
Position:1
Default value:comma (,)
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Encoding

가져온 CSV 파일의 인코딩을 지정합니다. 기본값은 utf8NoBOM.

이 매개 변수에 허용되는 값은 다음과 같습니다.

  • ascii: ASCII(7비트) 문자 집합에 대한 인코딩을 사용합니다.
  • ansi: 현재 문화권의 ANSI 코드 페이지에 대한 인코딩을 사용합니다. 이 옵션은 PowerShell 7.4에 추가되었습니다.
  • bigendianunicode: big-endian 바이트 순서를 사용하여 UTF-16 형식으로 인코딩합니다.
  • bigendianutf32: big-endian 바이트 순서를 사용하여 UTF-32 형식으로 인코딩합니다.
  • oem: MS-DOS 및 콘솔 프로그램에 기본 인코딩을 사용합니다.
  • unicode: little-endian 바이트 순서를 사용하여 UTF-16 형식으로 인코딩합니다.
  • utf7: UTF-7 형식으로 인코딩합니다.
  • utf8: UTF-8 형식으로 인코딩합니다.
  • utf8BOM: BOM(바이트 순서 표시)을 사용하여 UTF-8 형식으로 인코딩
  • utf8NoBOM: BOM(바이트 순서 표시)이 없는 UTF-8 형식으로 인코딩
  • utf32: UTF-32 형식으로 인코딩합니다.

PowerShell 6.2부터 인코딩 매개 변수는 등록된 코드 페이지(예: -Encoding 1251) 또는 등록된 코드 페이지의 문자열 이름(예: -Encoding "windows-1251")의 숫자 ID를 허용합니다. 자세한 내용은 Encoding.CodePage.NET 설명서를 참조하세요.

PowerShell 7.4부터 Ansi 매개 변수의 값을 사용하여 현재 문화권의 ANSI 코드 페이지에 대한 숫자 ID를 수동으로 지정할 필요 없이 전달할 수 있습니다.

메모

UTF-7*는 더 이상 사용하지 않는 것이 좋습니다. PowerShell 7.1을 기준으로 utf7 매개 변수에 대한 지정하면 경고가 기록됩니다.

형식:Encoding
허용되는 값:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:UTF8NoBOM
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Header

가져온 파일의 대체 열 머리글 행을 지정합니다. 열 머리글은 Import-Csv만든 개체의 속성 이름을 결정합니다.

열 머리글을 문자로 구분된 목록으로 입력합니다. 머리글 문자열을 따옴표로 묶지 마세요. 각 열 머리글을 작은따옴표로 묶습니다.

데이터 열보다 적은 열 머리글을 입력하면 나머지 데이터 열이 삭제됩니다. 데이터 열보다 더 많은 열 머리글을 입력하면 추가 열 머리글이 빈 데이터 열로 만들어집니다.

Header 매개 변수를 사용하는 경우 CSV 파일에서 원래 헤더 행을 삭제합니다. 그렇지 않으면 Import-Csv 머리글 행의 항목에서 추가 개체를 만듭니다.

형식:String[]
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-LiteralPath

가져올 CSV 파일의 경로를 지정합니다. Path달리 LiteralPath 매개 변수의 값은 입력된 대로 정확하게 사용됩니다. 와일드카드로 해석되는 문자는 없습니다. 경로에 이스케이프 문자가 포함된 경우 작은따옴표로 묶습니다. 작은따옴표는 PowerShell에 문자를 이스케이프 시퀀스로 해석하지 않도록 지시합니다.

형식:String[]
별칭:PSPath, LP
Position:Named
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-Path

가져올 CSV 파일의 경로를 지정합니다. 경로를 Import-Csv파이프할 수도 있습니다.

형식:String[]
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-UseCulture

현재 문화권의 목록 구분 기호를 항목 구분 기호로 사용합니다. 문화권의 목록 구분 기호를 찾으려면 다음 명령을 사용합니다. (Get-Culture).TextInfo.ListSeparator.

형식:SwitchParameter
Position:Named
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

입력

String

이 cmdlet에 대한 경로가 포함된 문자열을 파이프할 수 있습니다.

출력

Object

이 cmdlet은 CSV 파일의 콘텐츠에서 설명하는 개체를 반환합니다.

참고

PowerShell에는 Import-Csv다음과 같은 별칭이 포함되어 있습니다.

  • 모든 플랫폼:
    • ipcsv

가져온 개체는 개체 형식의 CSV 버전이므로 개체 형식의 비 CSV 버전에 서식을 지정하는 PowerShell 형식 형식 항목으로 인식되고 형식이 지정되지 않습니다.

Import-Csv 명령의 결과는 테이블과 유사한 사용자 지정 개체를 형성하는 문자열 컬렉션입니다. 각 행은 별도의 문자열이므로 개체의 Count 속성을 사용하여 테이블 행 수를 계산할 수 있습니다. 열은 개체의 속성이며 행의 항목은 속성 값입니다.

열 머리글 행은 열 수와 열 이름을 결정합니다. 열 이름은 개체 속성의 이름이기도 합니다. Header 매개 변수를 사용하여 열 머리글을 지정하지 않는 한 첫 번째 행은 열 머리글로 해석됩니다. 머리글 행보다 더 많은 값이 있는 행이 있으면 추가 값이 무시됩니다.

열 머리글 행에 값이 없거나 null 또는 빈 값이 포함된 경우 Import-CsvH 뒤에 누락된 열 머리글 및 속성 이름에 대한 숫자를 사용합니다.

CSV 파일에서 각 개체는 개체의 속성 값에 대해 문자로 구분된 목록으로 표시됩니다. 속성 값은 개체의 ToString() 메서드를 사용하여 문자열로 변환되므로 속성 값의 이름으로 표시됩니다. Export-Csv 개체의 메서드를 내보내지 않습니다.

Import-Csv W3C 확장 로그 형식도 지원합니다. 해시 문자(#)로 시작하는 줄은 주석으로 처리되며 주석이 #Fields: 시작하고 열 이름의 구분된 목록을 포함하지 않는 한 무시됩니다. 이 경우 cmdlet은 해당 열 이름을 사용합니다. Windows IIS 및 기타 웹 서버 로그의 표준 형식입니다. 자세한 내용은 확장 로그 파일 형식 참조하세요.