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


ConvertTo-Csv

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

Синтаксис

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

Описание

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

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

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

Примеры

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

В этом примере объект Process преобразуется в строку 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 получает объект Process и использует параметр Name для указания процесса 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 . Параметр Delimiter задает точку с запятой для разделения строковых значений. Параметр 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. Значение по умолчанию — запятая (,). Введите символ, например двоеточие (:). Чтобы указать точку с запятой (;), заключите ее в одинарные кавычки.

Type:Char
Position:1
Default value:comma (,)
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeTypeInformation

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

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

Type:SwitchParameter
Aliases:ITI
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

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

Type:PSObject
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NoTypeInformation

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

Type:SwitchParameter
Aliases:NTI
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-QuoteFields

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

Type:String[]
Aliases:QF
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseCulture

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseQuotes

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

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

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

Type:Microsoft.PowerShell.Commands.BaseCsvWritingCommand+QuoteKind
Aliases:UQ
Position:Named
Default value:Always
Required:False
Accept pipeline input:False
Accept wildcard characters:False

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

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-CSVупорядочивает ConvertTo-CSV строки на основе свойств первого объекта, который вы отправляете. Если оставшиеся объекты не имеют одного из указанных свойств, значение свойства этого объекта равно Null, представленное двумя последовательными запятыми. Если у остальных объектов есть дополнительные свойства, их значения игнорируются.