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-файле содержит пустое значение или значение 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
отправляет объекты процесса по конвейеру в 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
. Переменная $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 Core.
Переменная $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. Create пользовательского объекта с помощью 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 , включающим псевдоним.
Пример 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. Разделитель по умолчанию — запятая (,).
Введите символ, например двоеточие (:). Чтобы указать точку с запятой (;) заключите ее в одинарные кавычки.
Если в файле указан символ, отличный от фактического разделителя строк, Import-Csv
невозможно создать объекты из строк CSV и возвратит строки CSV.
Type: | Char |
Position: | 1 |
Default value: | comma (,) |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Encoding
Задает кодировку импортированного CSV-файла. Значение по умолчанию — utf8NoBOM
.
Ниже приведены допустимые значения для этого параметра.
ascii
: использует кодировку для кодировки 7-разрядной кодировки ASCII.bigendianunicode
: кодирует в формате UTF-16 с использованием порядка байтов большого байта.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.
Type: | Encoding |
Accepted values: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Position: | Named |
Default value: | UTF8NoBOM |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Header
Указывает альтернативную строку заголовков столбцов для импортируемого файла. Заголовок столбца определяет имена свойств объектов, созданных .Import-Csv
Введите заголовки столбцов в виде списка, разделенного запятыми. Не заключайте в кавычки строку заголовка. Заключите заголовок каждого столбца в одинарные кавычки.
При вводе меньшего количества заголовков столбцов, чем столбцов данных, остальные столбцы данных удаляются. Если ввести больше заголовков столбцов, чем столбцов данных, дополнительные заголовки столбцов создаются с пустыми столбцами данных.
При использовании параметра Header удалите исходную строку заголовков из файла CSV. Import-Csv
В противном случае создает дополнительный объект из элементов в строке заголовка.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-LiteralPath
Указывает путь к импортируемому файлу CSV. В отличие от параметра Path, значение параметра LiteralPath используется в точности так, как вводится. Никакие символы не интерпретируются как знаки подстановки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки предписывают PowerShell не интерпретировать какие-либо символы как escape-последовательности.
Type: | String[] |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Path
Указывает путь к импортируемому файлу CSV.
Вы также можете передать путь в Import-Csv
.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-UseCulture
Использует разделитель списка для текущего языка и региональных параметров в качестве разделителя элементов. Чтобы найти разделитель списка для языка и региональных параметров, используйте следующую команду: (Get-Culture).TextInfo.ListSeparator
.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Входные данные
Можно передать по конвейеру строку, содержащую путь, в Import-Csv
.
Выходные данные
Object
Этот командлет возвращает объекты, описанные в содержимом CSV-файла.
Примечания
Так как импортируемые объекты являются версиями csv типа объекта, они не распознаются и не форматируются записями форматирования типа PowerShell, которые форматируют версии типа объекта, отличные от CSV.
Результатом Import-Csv
выполнения команды является коллекция строк, образующих пользовательский объект, похожий на таблицу. Каждая строка является отдельной строкой, поэтому для подсчета строк таблицы можно использовать свойство Count объекта . Столбцы представляют свойства объекта, а поля строк — значения этих свойств.
Строка заголовков столбцов определяет число столбцов и их имена. Имена столбцов также являются именами свойств объектов. Первая строка интерпретируется как заголовки столбцов, если для указания заголовков столбцов не используется параметр Header . Если в какой-либо строке содержится больше значений, чем в строке заголовков, лишние значения игнорируются.
Если в строке заголовка столбца отсутствует значение или содержится пустое или пустое значение, используется H, Import-Csv
за которым следует число для отсутствующего заголовка столбца и имени свойства.
В CSV-файле каждый объект представлен списком значений свойств объекта с разделителями-запятыми. Значения свойств преобразуются в строки с помощью метода ToString() объекта , поэтому они представлены именем значения свойства. Export-Csv
не экспортирует методы объекта .
Import-Csv
также поддерживает формат расширенного журнала W3C. Строки, начинаемые с , #
обрабатываются как комментарии и игнорируются, если комментарий не начинается с и не содержит список имен столбцов с #Fields:
разделителями. В этом случае командлет использует эти имена столбцов. Это стандартный формат для windows IIS и других журналов веб-сервера. Дополнительные сведения см. в разделе Расширенный формат файла журнала.