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


ConvertTo-Csv

Преобразует объекты .NET в ряд строк, разделенных символами (CSV).

Синтаксис

Delimiter (по умолчанию)

ConvertTo-Csv
    [-InputObject] <PSObject>
    [[-Delimiter] <Char>]
    [-IncludeTypeInformation]
    [-NoTypeInformation]
    [-QuoteFields <String[]>]
    [-UseQuotes <QuoteKind>]
    [-NoHeader]
    [<CommonParameters>]

UseCulture

ConvertTo-Csv
    [-InputObject] <PSObject>
    [-UseCulture]
    [-IncludeTypeInformation]
    [-NoTypeInformation]
    [-QuoteFields <String[]>]
    [-UseQuotes <QuoteKind>]
    [-NoHeader]
    [<CommonParameters>]

Описание

Командлет ConvertTo-Csv возвращает ряд строк, разделенных символами (CSV), представляющих объекты, которые вы отправляете. Затем можно использовать командлет ConvertFrom-Csv для повторного создания объектов из строк CSV. Объекты, преобразованные из CSV, являются строковыми значениями исходных объектов, содержащих значения свойств, и никакие методы.

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

Командлет ConvertTo-Csv имеет параметры, чтобы указать разделитель, отличный от запятой, или использовать текущий язык и региональные параметры в качестве разделителя.

Примеры

Пример 1. Преобразование объекта в CSV

В этом примере объект процесса преобразуется в строку CSV.

Get-Process -Name pwsh | ConvertTo-Csv -NoTypeInformation
"Name","SI","Handles","VM","WS","PM","NPM","Path","Parent","Company","CPU","FileVersion", ...
"pwsh","8","950","2204001161216","100925440","59686912","67104", ...

Командлет Get-Process получает объект процесса и использует параметр имени для указания процесса PowerShell. Объект процесса отправляется в конвейер в командлет ConvertTo-Csv. Командлет ConvertTo-Csv преобразует объект в строки CSV. Параметр NoTypeInformation удаляет заголовок сведений #TYPE из выходных данных CSV и не требуется в PowerShell 6.

Пример 2. Преобразование объекта DateTime в CSV

В этом примере объект dateTime преобразуется в строку CSV.

$Date = Get-Date
ConvertTo-Csv -InputObject $Date -Delimiter ';' -NoTypeInformation
"DisplayHint";"DateTime";"Date";"Day";"DayOfWeek";"DayOfYear";"Hour";"Kind";"Millisecond";"Minute";"Month";"Second";"Ticks";"TimeOfDay";"Year"
"DateTime";"Friday, January 4, 2019 14:40:51";"1/4/2019 00:00:00";"4";"Friday";"4";"14";"Local";"711";"40";"1";"51";"636822096517114991";"14:40:51.7114991";"2019"

Командлет Get-Date получает объект DateTime и сохраняет его в переменной $Date. Командлет ConvertTo-Csv преобразует объект DateTime в строки. Параметр InputObject использует объект DateTime, хранящийся в переменной $Date. Параметр разделителя указывает точку с запятой для разделения строковых значений. Параметр NoTypeInformation удаляет заголовок сведений #TYPE из выходных данных CSV и не требуется в PowerShell 6.

Пример 3. Преобразование журнала событий PowerShell в CSV

В этом примере журнал событий Windows для PowerShell преобразуется в ряд строк CSV.

(Get-Culture).TextInfo.ListSeparator
Get-WinEvent -LogName 'PowerShellCore/Operational' |
    ConvertTo-Csv -UseCulture -NoTypeInformation
,
"Message","Id","Version","Qualifiers","Level","Task","Opcode","Keywords","RecordId", ...
"Error Message = System error""4100","1",,"3","106","19","0","31716","PowerShellCore", ...

Командлет Get-Culture использует вложенные свойства TextInfo и ListSeparator и отображает разделитель списка по умолчанию текущего языка и региональных параметров. Командлет Get-WinEvent получает объекты журнала событий и использует параметр LogName для указания имени файла журнала. Объекты журнала событий отправляются по конвейеру командлету ConvertTo-Csv. Командлет ConvertTo-Csv преобразует объекты журнала событий в ряд строк CSV. Параметр UseCulture использует разделитель списка по умолчанию текущего языка и региональных параметров в качестве разделителя. Параметр NoTypeInformation удаляет заголовок сведений #TYPE из выходных данных CSV и не требуется в PowerShell 6.

Пример 4. Преобразование в CSV с кавычками вокруг двух столбцов

В этом примере объект dateTime преобразуется в строку CSV.

Get-Date | ConvertTo-Csv -QuoteFields "DateTime","Date"
DisplayHint,"DateTime","Date",Day,DayOfWeek,DayOfYear,Hour,Kind,Millisecond,Minute,Month,Second,Ticks,TimeOfDay,Year
DateTime,"Thursday, August 22, 2019 11:27:34 AM","8/22/2019 12:00:00 AM",22,Thursday,234,11,Local,569,27,8,34,637020700545699784,11:27:34.5699784,2019

Пример 5. Преобразование в CSV с кавычками только при необходимости

В этом примере объект dateTime преобразуется в строку CSV.

Get-Date | ConvertTo-Csv -UseQuotes AsNeeded
DisplayHint,DateTime,Date,Day,DayOfWeek,DayOfYear,Hour,Kind,Millisecond,Minute,Month,Second,Ticks,TimeOfDay,Year
DateTime,"Thursday, August 22, 2019 11:31:00 AM",8/22/2019 12:00:00 AM,22,Thursday,234,11,Local,713,31,8,0,637020702607132640,11:31:00.7132640,2019

Пример 6. Преобразование хэш-файлов в CSV

В PowerShell 7.2 и более поздних версиях при преобразовании хэш-элементов в CSV ключи первой хэш-записи сериализуются и используются в качестве заголовков в выходных данных.

$person1 = @{
    Name = 'John Smith'
    Number = 1
}

$person2 = @{
    Name = 'Jane Smith'
    Number = 2
}

$allPeople = $person1, $person2
$allPeople | ConvertTo-Csv
"Name","Number"
"John Smith","1"
"Jane Smith","2"

Пример 7. Преобразование хэш-страниц в CSV с дополнительными свойствами

В PowerShell 7.2 и выше при преобразовании хэш-страницы с дополнительными свойствами, добавленными с помощью Add-Member или Select-Object дополнительные свойства также добавляются в виде заголовка в выходных данных CSV.

$allPeople | Add-Member -Name ExtraProp -Value 42
$allPeople | ConvertTo-Csv
"Name","Number","ExtraProp"
"John Smith","1","42"
"Jane Smith","2","42"

Каждый хэш-файл имеет свойство с именем ExtraProp добавлено Add-Member, а затем преобразуется в CSV- файл. Теперь ExtraProp отображается заголовок в выходных данных.

Если добавленное свойство имеет то же имя, что и ключ из хэш-страницы, ключ имеет приоритет, а ключ преобразуется только в CSV.

Параметры

-Delimiter

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

Свойства параметра

Тип:Char
Default value:comma (,)
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

Delimiter
Position:1
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-IncludeTypeInformation

Если этот параметр используется первая строка выходных данных, содержит #TYPE за которым следует полное имя типа объекта. Например: #TYPE System.Diagnostics.Process.

Этот параметр появился в PowerShell 6.0.

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:ITI

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-InputObject

Указывает объекты, преобразованные в строки CSV. Введите переменную, содержащую объекты или введите команду или выражение, которое получает объекты. Также можно передать объекты в ConvertTo-Csv.

Свойства параметра

Тип:PSObject
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:0
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-NoHeader

При использовании этого параметра командлет не записывает строку заголовка, содержащую имена столбцов в выходные данные.

Этот параметр добавлен в PowerShell 7.4.

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-NoTypeInformation

Удаляет заголовок сведений #TYPE из выходных данных. Этот параметр стал значением по умолчанию в PowerShell 6.0 и включен для обратной совместимости.

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:NTI

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-QuoteFields

Указывает имена столбцов, которые должны быть кавычек. Если этот параметр используется, кавычекируются только указанные столбцы. Этот параметр был добавлен в PowerShell 7.0.

Свойства параметра

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:QF

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-UseCulture

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

UseCulture
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-UseQuotes

Указывает, когда кавычки используются в CSV-файлах. Возможны следующие значения:

  • Никогда - не цитировать ничего
  • Всегда — процитировать все (поведение по умолчанию)
  • AsNeeded — только поля с разделителями, двойные кавычки или новый символ

Этот параметр был добавлен в PowerShell 7.0.

Свойства параметра

Тип:Microsoft.PowerShell.Commands.BaseCsvWritingCommand+QuoteKind
Default value:Always
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:UQ

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

CommonParameters

Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.

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

PSObject

Вы можете передать любой объект с адаптером расширенной системы типов (ETS) в этот командлет.

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

String

Этот командлет возвращает одну или несколько строк, представляющих каждый преобразованный объект.

Примечания

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

Строки CSV выводятся следующим образом:

  • Если используется IncludeTypeInformation, первая строка состоит из #TYPE после полного имени типа объекта. Например, #TYPE System.Diagnostics.Process.
  • Если IncludeTypeInformation не используется первая строка содержит заголовки столбцов. Заголовки содержат имена свойств первого объекта в виде разделенного символами списка.
  • Остальные строки содержат разделенные символами списки значений свойств каждого объекта.

Начиная с PowerShell 6.0 поведение ConvertTo-Csv по умолчанию не включает сведения #TYPE в CSV-файл и NoTypeInformation подразумевается. IncludeTypeInformation можно использовать для включения сведений #TYPE и эмулировать поведение по умолчанию ConvertTo-Csv до PowerShell 6.0.

При отправке нескольких объектов в ConvertTo-CsvConvertTo-Csv упорядочивает строки на основе свойств первого объекта, который вы отправляете. Если остальные объекты не имеют одного из указанных свойств, значение свойства этого объекта равно NULL, как представлено двумя последовательными запятыми. Если оставшиеся объекты имеют дополнительные свойства, эти значения свойств игнорируются.