Поделиться через


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

Описание

Командлет Import-Csv создает такие настраиваемые объекты из элементов в CSV-файлах. Каждый столбец в CSV-файле становится свойством пользовательского объекта, а элементы в строках становятся значениями свойств. Import-Csv работает с любым CSV-файлом, включая файлы, созданные командлетом Export-Csv.

Параметры командлета Import-Csv можно использовать для указания строки заголовка столбца и разделителя элементов или прямого Import-Csv для использования разделителя списка для текущего языка и региональных параметров в качестве разделителя элементов.

Можно также использовать командлеты ConvertTo-Csv и ConvertFrom-Csv для преобразования объектов в строки CSV (и обратно). Эти командлеты совпадают с Export-CSV и Import-Csv командлетами, за исключением того, что они работают с данными из конвейера, а не из файлов.

Если запись строки заголовка в CSV-файле содержит пустое или пустое значение, 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 отправляет объекты процесса вниз конвейера в Export-Csv. Командлет Export-Csv преобразует объекты процесса в строки CSV и сохраняет строки в файле Processes.csv. Командлет Import-Csv импортирует строки CSV из файла Processes.csv. Строки сохраняются в переменной $P. Переменная $P отправляется по конвейеру в командлет Get-Member, который отображает свойства импортированных строк CSV. Переменная $P отправляется по конвейеру в командлет Format-Table и отображает объекты.

Пример 2. Указание разделителя

В этом примере показано, как использовать параметр разделителя командлета Import-Csv.

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

Командлет Get-Process отправляет объекты процесса вниз конвейера в Export-Csv. Командлет Export-Csv преобразует объекты процесса в строки CSV и сохраняет строки в файле Processes.csv. Параметр разделителя используется для указания разделителя двоеточия. Командлет Import-Csv импортирует строки CSV из файла Processes.csv. Строки сохраняются в переменной $P. Чтобы $P переменная отправляется по конвейеру в командлет Format-Table.

Пример 3. Указание текущего языка и региональных параметров для разделителя

В этом примере показано, как использовать командлет Import-Csv с параметром UseCulture.

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

Командлет Get-Culture использует вложенные свойства TextInfo и ListSeparator для получения разделителя списка по умолчанию текущего языка и региональных параметров. Командлет Get-Process отправляет объекты процесса вниз конвейера в Export-Csv. Командлет Export-Csv преобразует объекты процесса в строки CSV и сохраняет строки в файле Processes.csv. Параметр UseCulture использует разделитель списка по умолчанию текущего языка и региональных параметров. Командлет Import-Csv импортирует строки CSV из файла Processes.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 запускает фоновое задание, которое запускает Get-Process. Объект задания отправляется по конвейеру в командлет Export-Csv и преобразуется в строку CSV. Параметр NoTypeInformation удаляет заголовок сведений о типе из выходных данных CSV и необязателен в PowerShell версии 6 и выше. Переменная $Header содержит настраиваемый заголовок, заменяющий следующие значения по умолчанию: HasMoreData, JobStateInfo, PSBeginTime, PSEndTimeи PSJobTypeName. Переменная $A использует командлет Get-Content для получения строки CSV из файла Jobs.csv. Переменная $A используется для удаления заголовка по умолчанию из файла. Командлет Out-File сохраняет новую версию файла Jobs.csv в переменной $A. Командлет Import-Csv импортирует файл Jobs.csv и использует параметр заголовка для применения переменной $Header. Переменная $J содержит импортированный PSCustomObject и отображает объект в консоли PowerShell.

Пример 5. Создание пользовательского объекта с помощью CSV-файла

В этом примере показано, как создать пользовательский объект в PowerShell с помощью 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

Чтобы создать файл Links.csv, используйте значения, отображаемые в выходных данных Get-Content.

Командлет Get-Content отображает файл Links.csv. Командлет Import-Csv импортирует файл Links.csv. Параметр заголовка указывает имена свойств LinkId и TopicTitle. Объекты хранятся в переменной $A. Командлет Get-Member отображает имена свойств из параметра заголовка. Командлет Where-Object выбирает объекты с свойством topicTitle, которое включает псевдоним .

Пример 6. Импорт CSV,который отсутствует значение

В этом примере показано, как командлет Import-Csv в PowerShell реагирует, когда строка заголовка в CSV-файле содержит значение NULL или пустое значение. 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 отображает файл Projects.csv. Строка заголовка отсутствует между Имя_проекта и Завершено. Командлет Import-Csv импортирует файл 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: кодирует в формате UTF-16 с помощью порядка байтов больших байтов.
  • bigendianutf32: кодирует в формате UTF-32 с помощью порядка байтов больших байтов.
  • oem. Использует кодировку по умолчанию для MS-DOS и консольных программ.
  • unicode: кодирует в формате UTF-16 с помощью байтового порядка маленьких байтов.
  • utf7: кодирует в формате UTF-7.
  • utf8: кодирует в формате UTF-8.
  • utf8BOM. Кодирование в формате UTF-8 с меткой порядка байтов (BOM)
  • utf8NoBOM. Кодирование в формате UTF-8 без метки порядка байтов (BOM)
  • utf32: кодирует в формате UTF-32.

Начиная с PowerShell 6.2, параметр кодировки также позволяет числовым идентификаторам зарегистрированных кодовых страниц (например, -Encoding 1251) или строковым именам зарегистрированных кодовых страниц (например, -Encoding "windows-1251"). Дополнительные сведения см. в документации по .NET для Кодировка.CodePage.

Начиная с PowerShell 7.4, можно использовать значение Ansi для параметра кодировки для передачи числового идентификатора для кодовой страницы ANSI текущего языка и региональных параметров, не указывая ее вручную.

Заметка

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.

Введите заголовки столбцов в виде разделенного символами списка. Не заключайте строку заголовка в кавычки. Заключите каждый заголовок столбца в одинарные кавычки.

Если ввести меньше заголовков столбцов, чем есть столбцы данных, остальные столбцы данных удаляются. Если ввести больше заголовков столбцов, чем есть столбцы данных, дополнительные заголовки столбцов создаются с пустыми столбцами данных.

При использовании параметра заголовка удалите исходную строку заголовка из CSV-файла. В противном случае Import-Csv создает дополнительный объект из элементов в строке заголовка.

Тип:String[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-LiteralPath

Указывает путь к CSV-файлу для импорта. В отличие от пути, значение параметра LiteralPath используется точно так же, как он типизированный. Символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки говорят PowerShell не интерпретировать какие-либо символы как escape-последовательности.

Тип:String[]
Aliases: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

Можно передать строку, содержащую путь к этому командлету.

Выходные данные

Object

Этот командлет возвращает объекты, описанные содержимым в CSV-файле.

Примечания

PowerShell включает следующие псевдонимы для Import-Csv:

  • Все платформы:
    • ipcsv

Так как импортированные объекты являются CSV-версиями типа объекта, они не распознаются и форматируются записями форматирования типов PowerShell, которые форматируют версии не CSV типа объекта.

Результатом команды Import-Csv является коллекция строк, формирующих пользовательский объект, например таблицу. Каждая строка является отдельной строкой, поэтому для подсчета строк таблицы можно использовать свойство Count объекта. Столбцы являются свойствами объекта и элементов в строках — это значения свойств.

Строка заголовка столбца определяет количество столбцов и имен столбцов. Имена столбцов также являются именами свойств объектов. Первая строка интерпретируется как заголовки столбцов, если для указания заголовков столбцов не используется параметр заголовка. Если любая строка имеет больше значений, чем строка заголовка, дополнительные значения игнорируются.

Если строка заголовка столбца отсутствует или содержит значение NULL или пустое значение, Import-Csv использует H за которым следует число для отсутствующего заголовка столбца и имени свойства.

В CSV-файле каждый объект представлен символьным списком значений свойств объекта. Значения свойств преобразуются в строки с помощью метода ToString() объекта, поэтому они представлены именем значения свойства. Export-Csv не экспортирует методы объекта.

Import-Csv также поддерживает формат расширенного журнала W3C. Строки, начиная с хэш-символа (#) рассматриваются как комментарии и игнорируются, если комментарий не начинается с #Fields: и содержит разделенный список имен столбцов. В этом случае командлет использует эти имена столбцов. Это стандартный формат для служб IIS Windows и других журналов веб-сервера. Дополнительные сведения см. в разделе Расширенный формат файла журнала.