Import-Csv
Создает такие табличные объекты из элементов в ФАЙЛЕ, разделенном символами (CSV).
Синтаксис
DelimiterPath (по умолчанию)
Import-Csv
[[-Delimiter] <Char>]
[-Path] <String[]>
[-Header <String[]>]
[-Encoding <Encoding>]
[<CommonParameters>]
DelimiterLiteralPath
Import-Csv
[[-Delimiter] <Char>]
-LiteralPath <String[]>
[-Header <String[]>]
[-Encoding <Encoding>]
[<CommonParameters>]
CulturePath
Import-Csv
[-Path] <String[]>
-UseCulture
[-Header <String[]>]
[-Encoding <Encoding>]
[<CommonParameters>]
CultureLiteralPath
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. Изменение имен свойств в импортированном объекте
В этом примере показано, как использовать параметр заголовка
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. Параметр заголовка $A
. Командлет
Пример 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 |
Default value: | comma (,) |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
DelimiterPath
Position: | 1 |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
DelimiterLiteralPath
Position: | 1 |
Обязательно: | False |
Значение из конвейера: | 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 с пометкой порядка байтов (Byte Order Mark, BOM) -
utf8NoBOM
: Кодирует в формате UTF-8 без метки порядка байтов (BOM) -
utf32
: кодирует в формате UTF-32.
Начиная с PowerShell 6.2, параметр кодировки
Начиная с PowerShell 7.4, можно использовать значение Ansi
для параметра кодировки, чтобы передать числовой идентификатор ANSI-страницы текущей культуры, не указывая его вручную.
Замечание
UTF-7* больше не рекомендуется использовать. Начиная с версии PowerShell 7.1, выводится предупреждение, если задать utf7
как параметр кодировки.
Свойства параметра
Тип: | Encoding |
Default value: | UTF8NoBOM |
Допустимые значения: | ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Header
Указывает альтернативную строку заголовка столбца для импортированного файла. Заголовок столбца определяет имена свойств объектов, созданных Import-Csv
.
Введите заголовки столбцов в виде разделенного символами списка. Не заключайте строку заголовка в кавычки. Заключите каждый заголовок столбца в одинарные кавычки.
Если ввести меньше заголовков столбцов, чем есть столбцы данных, остальные столбцы данных удаляются. Если ввести больше заголовков столбцов, чем есть столбцы данных, дополнительные заголовки столбцов создаются с пустыми столбцами данных.
При использовании параметра заголовка Import-Csv
создает дополнительный объект из элементов в строке заголовка.
Свойства параметра
Тип: | String[] |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-LiteralPath
Указывает путь к CSV-файлу для импорта. В отличие от пути, значение параметра LiteralPath используется точно так, как напечатано. Никакие символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки указывают PowerShell на то, что не следует интерпретировать какие-либо символы как управляющие последовательности.
Свойства параметра
Тип: | String[] |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Aliases: | PSPath, LP |
Наборы параметров
DelimiterLiteralPath
Position: | Named |
Обязательно: | True |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | True |
Значение из оставшихся аргументов: | False |
CultureLiteralPath
Position: | Named |
Обязательно: | True |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | True |
Значение из оставшихся аргументов: | False |
-Path
Указывает путь к CSV-файлу для импорта.
Можно также передать путь к Import-Csv
.
Свойства параметра
Тип: | String[] |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
DelimiterPath
Position: | 0 |
Обязательно: | True |
Значение из конвейера: | True |
Значение из конвейера по имени свойства: | True |
Значение из оставшихся аргументов: | False |
CulturePath
Position: | 0 |
Обязательно: | True |
Значение из конвейера: | True |
Значение из конвейера по имени свойства: | True |
Значение из оставшихся аргументов: | False |
-UseCulture
Использует разделитель списка для текущей культуры в качестве делимитера элементов. Чтобы найти разделитель списка для культуры, используйте следующую команду: (Get-Culture).TextInfo.ListSeparator
.
Свойства параметра
Тип: | SwitchParameter |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
CulturePath
Position: | Named |
Обязательно: | True |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
CultureLiteralPath
Position: | Named |
Обязательно: | True |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
CommonParameters
Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.
Входные данные
String
Можно передать строку, содержащую путь к этому командлету.
Выходные данные
Object
Этот командлет возвращает объекты, описанные содержимым в CSV-файле.
Примечания
PowerShell включает следующие псевдонимы для Import-Csv
:
- Все платформы:
ipcsv
Так как импортированные объекты являются CSV-версиями типа объекта, они не распознаются и форматируются записями форматирования типов PowerShell, которые форматируют версии не CSV типа объекта.
Результатом команды Import-Csv
является коллекция строк, формирующих пользовательский объект, например таблицу. Каждая строка является отдельной строкой, поэтому для подсчета строк таблицы можно использовать свойство Count объекта. Столбцы являются свойствами объекта и элементов в строках — это значения свойств.
Строка заголовка столбца определяет количество столбцов и имен столбцов. Имена столбцов также являются именами свойств объектов. Если вы не используете параметр "Header" для указания заголовков столбцов, первая строка интерпретируется как заголовки столбцов. Если любая строка имеет больше значений, чем строка заголовка, дополнительные значения игнорируются.
Если строка заголовка столбца отсутствует или содержит значение NULL или пустое значение, Import-Csv
использует H за которым следует число для отсутствующего заголовка столбца и имени свойства.
В CSV-файле каждый объект представлен символьным списком значений свойств объекта. Значения свойств преобразуются в строки с помощью метода Export-Csv
не экспортирует методы объекта.
Import-Csv
также поддерживает формат расширенного журнала W3C. Строки, начиная с хэш-символа (#
) рассматриваются как комментарии и игнорируются, если комментарий не начинается с #Fields:
и содержит разделенный список имен столбцов. В этом случае командлет использует эти имена столбцов. Это стандартный формат для служб IIS Windows и других журналов веб-сервера. Дополнительные сведения см. в разделе Расширенный формат файла журнала.