ConvertTo-Csv

Converte objetos .NET em uma série de cadeias de caracteres CSV (valores separados por caracteres).

Sintaxe

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

Description

O ConvertTo-CSV cmdlet retorna uma série de cadeias de caracteres CSV (valores separados por caracteres) que representam os objetos que você envia. Em seguida, você pode usar o ConvertFrom-Csv cmdlet para recriar objetos das cadeias de caracteres CSV. Os objetos convertidos de CSV são valores de cadeia de caracteres dos objetos originais que contêm valores de propriedade e nenhum método.

Você pode usar o Export-Csv cmdlet para converter objetos em cadeias de caracteres CSV. Export-CSV é semelhante ao ConvertTo-CSV, exceto que salva as strings CSV em um arquivo.

O ConvertTo-CSV cmdlet tem parâmetros para especificar um delimitador diferente de uma vírgula ou usar a cultura atual como delimitador.

Exemplos

Exemplo 1: Converter um objeto em CSV

Este exemplo converte um objeto Process em uma string 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", ...

O Get-Process cmdlet obtém o objeto Process e usa o parâmetro Name para especificar o processo do PowerShell. O objeto de processo é enviado pelo pipeline para o ConvertTo-CSV cmdlet. O ConvertTo-CSV cmdlet converte o objeto em cadeias de caracteres CSV. O parâmetro NoTypeInformation remove o cabeçalho de informações #TYPE da saída CSV e não é necessário no PowerShell 6.

Exemplo 2: Converter um objeto DateTime em CSV

Este exemplo converte um objeto DateTime em uma cadeia de caracteres 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"

O Get-Date cmdlet obtém o objeto DateTime e o salva na $Date variável. O ConvertTo-Csv cmdlet converte o objeto DateTime em cadeias de caracteres. O parâmetro InputObject usa o objeto DateTime armazenado na $Date variável. O parâmetro Delimiter especifica um ponto-e-vírgula para separar os valores de cadeia de caracteres. O parâmetro NoTypeInformation remove o cabeçalho de informações #TYPE da saída CSV e não é necessário no PowerShell 6.

Exemplo 3: Converter o log de eventos do PowerShell em CSV

Este exemplo converte o log de eventos do Windows para o PowerShell em uma série de cadeias de caracteres 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", ...

O Get-Culture cmdlet usa as propriedades aninhadas TextInfo e ListSeparator e exibe o separador de lista padrão da cultura atual. O Get-WinEvent cmdlet obtém os objetos de log de eventos e usa o parâmetro LogName para especificar o nome do arquivo de log. Os objetos de log de eventos são enviados pelo pipeline para o ConvertTo-Csv cmdlet. O ConvertTo-Csv cmdlet converte os objetos de log de eventos em uma série de cadeias de caracteres CSV. O parâmetro UseCulture usa o separador de lista padrão da cultura atual como o delimitador. O parâmetro NoTypeInformation remove o cabeçalho de informações #TYPE da saída CSV e não é necessário no PowerShell 6.

Exemplo 4: Converter para CSV com aspas em torno de duas colunas

Este exemplo converte um objeto DateTime em uma cadeia de caracteres 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

Exemplo 5: Converter para CSV com aspas somente quando necessário

Este exemplo converte um objeto DateTime em uma cadeia de caracteres 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

Exemplo 6: Converter tabelas de hash em CSV

No PowerShell 7.2 e superior, quando você converte tabelas de hash em CSV, as chaves da primeira tabela de hash são serializadas e usadas como cabeçalhos na saída.

$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"

Exemplo 7: Convertendo tabelas de hash em CSV com propriedades adicionais

No PowerShell 7.2 e superior, quando você converte uma tabela de hash que tem propriedades adicionais adicionadas ou Add-Member Select-Object as propriedades adicionais também são adicionadas como um cabeçalho na saída CSV.

$allPeople | Add-Member -Name ExtraProp -Value 42
$allPeople | ConvertTo-Csv

"Name","Number","ExtraProp"
"John Smith","1","42"
"Jane Smith","2","42"

Cada tabela de hash tem uma propriedade chamada ExtraProp added by Add-Member e depois convertida em CSV. Você pode ver que ExtraProp agora é um cabeçalho na saída.

Se uma propriedade adicionada tiver o mesmo nome de uma chave da tabela de hash, a chave terá precedência e somente a chave será convertida em CSV.

Parâmetros

-Delimiter

Especifica o delimitador para separar os valores de propriedade em cadeias de caracteres CSV. O padrão é uma vírgula (,). Insira um caractere, como dois-pontos (:). Para especificar um ponto-e-vírgula (;), coloque-o entre aspas simples.

Tipo:Char
Cargo:1
Valor padrão:comma (,)
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-IncludeTypeInformation

Quando esse parâmetro é usado, a primeira linha da saída contém #TYPE seguida pelo nome totalmente qualificado do tipo de objeto. Por exemplo, #TYPE System.Diagnostics.Process.

Esse parâmetro foi introduzido no PowerShell 6.0.

Tipo:SwitchParameter
Aliases:ITI
Cargo:Named
Valor padrão:False
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-InputObject

Especifica os objetos que são convertidos em cadeias de caracteres CSV. Insira uma variável que contém os objetos ou digite um comando ou uma expressão que obtém os objetos. Você também pode canalizar objetos para ConvertTo-CSV.

Tipo:PSObject
Cargo:0
Valor padrão:None
Obrigatório:True
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-NoHeader

Quando esse parâmetro é usado, o cmdlet não grava uma linha de cabeçalho contendo os nomes de coluna na saída.

Esse parâmetro foi adicionado no PowerShell 7.4.

Tipo:SwitchParameter
Cargo:Named
Valor padrão:False
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-NoTypeInformation

Remove o #TYPE cabeçalho de informações da saída. Esse parâmetro se tornou o padrão no PowerShell 6.0 e está incluído para compatibilidade com versões anteriores.

Tipo:SwitchParameter
Aliases:NTI
Cargo:Named
Valor padrão:False
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-QuoteFields

Especifica os nomes das colunas que devem ser citadas. Quando esse parâmetro é usado, apenas as colunas especificadas são citadas. Esse parâmetro foi adicionado no PowerShell 7.0.

Tipo:String[]
Aliases:QF
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-UseCulture

Usa o separador de lista para a cultura atual como o delimitador de item. Para localizar o separador de lista de uma cultura, use o seguinte comando: (Get-Culture).TextInfo.ListSeparator.

Tipo:SwitchParameter
Cargo:Named
Valor padrão:False
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-UseQuotes

Especifica quando as aspas são usadas nos arquivos CSV. Os valores possíveis são:

  • Nunca - não cite nada
  • Sempre - aspas todas (comportamento padrão)
  • AsNeeded - apenas campos de aspas que contenham um caractere delimitador, aspas duplas ou caractere de nova linha

Esse parâmetro foi adicionado no PowerShell 7.0.

Tipo:Microsoft.PowerShell.Commands.BaseCsvWritingCommand+QuoteKind
Aliases:UQ
Cargo:Named
Valor padrão:Always
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

Entradas

PSObject

Você pode canalizar qualquer objeto que tenha um adaptador ETS (Sistema de Tipos Estendidos) para esse cmdlet.

Saídas

String

Esse cmdlet retorna uma ou mais cadeias de caracteres que representam cada objeto convertido.

Observações

No formato CSV, cada objeto é representado por uma lista separada por caracteres de seu valor de propriedade. Os valores de propriedade são convertidos em strings usando o método ToString() do objeto. As cadeias de caracteres são representadas pelo nome do valor da propriedade. ConvertTo-CSV não exporta os métodos do objeto.

As strings CSV são geradas da seguinte maneira:

  • Se IncludeTypeInformation for usado, a primeira cadeia de caracteres consistirá em #TYPE seguida pelo nome totalmente qualificado do tipo de objeto. Por exemplo, #TYPE System.Diagnostics.Process.
  • Se IncludeTypeInformation não for usado, a primeira cadeia de caracteres incluirá os cabeçalhos de coluna. Os cabeçalhos contêm os nomes de propriedade do primeiro objeto como uma lista separada por caracteres.
  • As cadeias de caracteres restantes contêm listas separadas por caracteres dos valores de propriedade de cada objeto.

A partir do PowerShell 6.0, o comportamento padrão é ConvertTo-CSV não incluir as informações #TYPE no CSV e NoTypeInformation está implícito. IncludeTypeInformation pode ser usado para incluir as informações #TYPE e emular o comportamento padrão anterior ConvertTo-CSV ao PowerShell 6.0.

Quando você envia vários objetos para o ConvertTo-CSV, ConvertTo-CSV ordena as seqüências de caracteres com base nas propriedades do primeiro objeto enviado. Se os objetos restantes não tiverem uma das propriedades especificadas, o valor da propriedade desse objeto será Nulo, conforme representado por duas vírgulas consecutivas. Se os objetos restantes têm propriedades adicionais, esses valores das propriedades serão ignorados.