Поиск по сайту:

Import-Csv (Microsoft.PowerShell.Utility)


Import-Csv

Модуль:
Microsoft.PowerShell.Utility

Создает табличные пользовательские объекты из элементов в файле значений, разделенных символами (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. Укажите разделитель

В этом примере показано, как использовать параметр Delimiter командлета 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. Параметр Delimiter используется для указания разделителя-двоеточия. Командлет Import-Csv импортирует строки CSV из файла Processes.csv. Строки сохраняются в переменной $P. Переменная To $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. Изменение названий свойств в импортированном объекте

В этом примере показано, как использовать параметр Header 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 v6 и более поздних версиях. Переменная $Header содержит пользовательский заголовок, который заменяет следующие значения по умолчанию: HasMoreData, JobStateInfo, PSBeginTime, PSEndTime и PSJobTypeName. Переменная $A использует командлет Get-Content для получения строки CSV из файла Jobs.csv. Переменная $A используется для удаления заголовка по умолчанию из файла. Командлет Out-File сохраняет новую версию файла Jobs.csv в переменной $A. Командлет Import-Csv импортирует файл Jobs.csv и использует параметр Header для применения переменной $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. Параметр Header определяет имена свойств LinkId и TopicTitle. Объекты хранятся в переменной $A. Командлет Get-Member отображает имена свойств из параметра Header. Командлет Where-Object выбирает объекты со свойством TopicTitle, которое включает alias.

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

В этом примере показано, как командлет Import-Csv в PowerShell реагирует, когда строка заголовка в CSV-файле содержит нулевое или пустое значение. 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 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

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

Командлет Get-Content отображает файл Projects.csv. В строке заголовка отсутствует значение между ProjectName и Completed. Командлет Import-Csv импортирует файл Projects.csv и отображает предупреждающее сообщение, поскольку H1 — это имя заголовка по умолчанию. Команда (Import-Csv -Path .\Projects.csv).H1 получает значения свойства H1 и отображает предупреждение.

Параметры

-Delimiter

Указывает разделитель, разделяющий значения свойств в файле CSV. По умолчанию используется запятая (,).

Введите символ, например двоеточие (:). Чтобы указать точку с запятой (;), заключите ее в одинарные кавычки. Чтобы указать экранированные специальные символы, такие как табуляция (`t), заключите их в двойные кавычки.

Если вы укажете символ, отличный от фактического разделителя строк в файле, Import-Csv не сможет создать объекты из строк CSV и вернет строки CSV.

Тип :

Чар

Позиция:

1

Значение по умолчанию:

запятая (,)

Необходимый:

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 также позволяет использовать числовые идентификаторы зарегистрированных кодовых страниц (например, -Encoding 1251) или строковые имена зарегистрированных кодовых страниц (например, -Encoding). "windows-1251"). Дополнительные сведения см. в документации .NET для Encoding.CodePage.

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

Примечание

UTF-7* больше не рекомендуется использовать. Начиная с PowerShell 7.1, предупреждение выводится, если вы укажете utf7 для параметра Кодировка.

Тип :

Кодирование

Принятые значения:

ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32

Позиция:

Именованный

Значение по умолчанию:

UTF8NoBOM

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Header

Указывает альтернативную строку заголовка столбца для импортируемого файла. Заголовок столбца определяет имена свойств объектов, созданных с помощью Import-Csv.

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

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

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

Тип :

String[]

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-LiteralPath

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

Тип :

String[]

Псевдонимы:

PSPath, LP

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-Path

Указывает путь к файлу CSV для импорта. Вы также можете указать путь к Import-Csv.

Тип :

String[]

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-UseCulture

В качестве разделителя элементов используется разделитель списка для текущей культуры. Чтобы найти разделитель списка для культуры, используйте следующую команду: (Get-Culture).TextInfo.ListSeparator.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

Входы

Строка

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

Выходы

Объект

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

Примечания

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

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

      ipcsv

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

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

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

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

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

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