ConvertTo-Csv

Convierte objetos .NET en una serie de cadenas de valores separados por caracteres (CSV).

Syntax

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

El ConvertTo-CSV cmdlet devuelve una serie de cadenas de valores separados por caracteres (CSV) que representan los objetos que envía. A continuación, puede usar el ConvertFrom-Csv cmdlet para volver a crear objetos a partir de las cadenas CSV. Los objetos convertidos desde CSV son valores de cadena de los objetos originales que contienen valores de propiedad y ningún método.

Puede usar el Export-Csv cmdlet para convertir objetos en cadenas CSV. Export-CSV es similar a ConvertTo-CSV, salvo que guarda las cadenas CSV en un archivo.

El ConvertTo-CSV cmdlet tiene parámetros para especificar un delimitador distinto de una coma o usar la referencia cultural actual como delimitador.

Ejemplos

Ejemplo 1: Convertir un objeto en CSV

En este ejemplo se convierte un objeto Process en una cadena 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", ...

El Get-Process cmdlet obtiene el objeto Process y usa el parámetro Name para especificar el proceso de PowerShell. El objeto de proceso se envía a la canalización al ConvertTo-CSV cmdlet . El ConvertTo-CSV cmdlet convierte el objeto en cadenas CSV. El parámetro NoTypeInformation quita el encabezado de información #TYPE de la salida CSV y no es necesario en PowerShell 6.

Ejemplo 2: Convertir un objeto DateTime en CSV

En este ejemplo se convierte un objeto DateTime en una cadena 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"

El Get-Date cmdlet obtiene el objeto DateTime y lo guarda en la $Date variable . El ConvertTo-Csv cmdlet convierte el objeto DateTime en cadenas. El parámetro InputObject usa el objeto DateTime almacenado en la $Date variable . El parámetro Delimiter especifica un punto y coma para separar los valores de cadena. El parámetro NoTypeInformation quita el encabezado de información #TYPE de la salida CSV y no es necesario en PowerShell 6.

Ejemplo 3: Conversión del registro de eventos de PowerShell en CSV

En este ejemplo se convierte el registro de eventos de Windows para PowerShell en una serie de cadenas 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", ...

El Get-Culture cmdlet usa las propiedades anidadas TextInfo y ListSeparator y muestra el separador de lista predeterminado de la referencia cultural actual. El Get-WinEvent cmdlet obtiene los objetos de registro de eventos y usa el parámetro LogName para especificar el nombre del archivo de registro. Los objetos de registro de eventos se envían a la canalización al ConvertTo-Csv cmdlet . El ConvertTo-Csv cmdlet convierte los objetos de registro de eventos en una serie de cadenas CSV. El parámetro UseCulture usa el separador de lista predeterminado de la referencia cultural actual como delimitador. El parámetro NoTypeInformation quita el encabezado de información #TYPE de la salida CSV y no es necesario en PowerShell 6.

Ejemplo 4: Conversión a CSV con comillas alrededor de dos columnas

En este ejemplo se convierte un objeto DateTime en una cadena 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

Ejemplo 5: Conversión a CSV con comillas solo cuando sea necesario

En este ejemplo se convierte un objeto DateTime en una cadena 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

Ejemplo 6: Conversión de tablas hash a CSV

En PowerShell 7.2 y versiones posteriores, al convertir tablas hash en CSV, las claves de la primera tabla hash se serializan y se usan como encabezados en la salida.

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

Ejemplo 7: Conversión de tablas hash a CSV con propiedades adicionales

En PowerShell 7.2 y versiones posteriores, cuando se convierte una tabla hash que tiene propiedades adicionales agregadas con Add-Member o Select-Object las propiedades adicionales también se agregan como encabezado en la salida CSV.

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

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

Cada tabla hash tiene una propiedad denominada ExtraProp agregada por Add-Member y, a continuación, convertida en CSV. Ahora puede ver ExtraProp que es un encabezado en la salida.

Si una propiedad agregada tiene el mismo nombre que una clave de la tabla hash, la clave tiene prioridad y solo la clave se convierte en CSV.

Parámetros

-Delimiter

Especifica el delimitador para separar los valores de propiedad en cadenas CSV. El valor predeterminado es una coma (,). Escriba un carácter, como dos puntos (:). Para especificar un punto y coma (;) lo incluye entre comillas simples.

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

-IncludeTypeInformation

Cuando se usa este parámetro, la primera línea de la salida contiene #TYPE seguida del nombre completo del tipo de objeto. Por ejemplo, #TYPE System.Diagnostics.Process.

Este parámetro se introdujo en PowerShell 6.0.

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

-InputObject

Especifica los objetos que se convierten en cadenas CSV. Especifique una variable que contenga los objetos, o escriba un comando o una expresión que obtenga los objetos. También puede canalizar objetos a ConvertTo-CSV.

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

-NoHeader

Cuando se usa este parámetro, el cmdlet no escribe una fila de encabezado que contiene los nombres de columna en la salida.

Este parámetro se agregó en PowerShell 7.4.

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

-NoTypeInformation

Quita el #TYPE encabezado de información de la salida. Este parámetro se convirtió en el valor predeterminado en PowerShell 6.0 y se incluye para la compatibilidad con versiones anteriores.

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

-QuoteFields

Especifica los nombres de las columnas que se deben citar. Cuando este parámetro se usa solo se citan las columnas especificadas. Este parámetro se agregó en PowerShell 7.0.

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

-UseCulture

Usa el separador de lista para la referencia cultural actual como delimitador de elementos. Para buscar el separador de lista de una referencia cultural, use el siguiente comando: (Get-Culture).TextInfo.ListSeparator.

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

-UseQuotes

Especifica cuándo se usan comillas en los archivos CSV. Los valores posibles son:

  • Nunca- no comillas nada
  • Siempre: comillas todo (comportamiento predeterminado)
  • AsNeeded: solo campos de comillas que contienen un carácter delimitador, comillas dobles o carácter de nueva línea

Este parámetro se agregó en 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

Entradas

PSObject

Puede canalizar cualquier objeto que tenga un adaptador del Sistema de tipos extendidos (ETS) a este cmdlet.

Salidas

String

Este cmdlet devuelve una o varias cadenas que representan cada objeto convertido.

Notas

En formato CSV, cada objeto se representa mediante una lista separada por caracteres de su valor de propiedad. Los valores de propiedad se convierten en cadenas mediante el método ToString() del objeto. Las cadenas se representan mediante el nombre del valor de propiedad. ConvertTo-CSV no exporta los métodos del objeto.

Las cadenas CSV se generan de la siguiente manera:

  • Si se usa IncludeTypeInformation , la primera cadena consta de #TYPE seguido del nombre completo del tipo de objeto. Por ejemplo, #TYPE System.Diagnostics.Process.
  • Si IncludeTypeInformation no se usa la primera cadena incluye los encabezados de columna. Los encabezados contienen los nombres de propiedad del primer objeto como una lista separada por caracteres.
  • Las cadenas restantes contienen listas separadas por caracteres de los valores de propiedad de cada objeto.

A partir de PowerShell 6.0, el comportamiento predeterminado de ConvertTo-CSV es no incluir la información de #TYPE en csv y NoTypeInformation está implícita. IncludeTypeInformation se puede usar para incluir la información de #TYPE y emular el comportamiento predeterminado de antes de ConvertTo-CSV PowerShell 6.0.

Al enviar varios objetos a ConvertTo-CSV, ConvertTo-CSV ordena las cadenas en función de las propiedades del primer objeto que envíe. Si los objetos restantes no tienen una de las propiedades especificadas, el valor de propiedad de ese objeto es Null, como se representa mediante dos comas consecutivas. Si los objetos restantes tienen propiedades adicionales, se omiten los valores de dichas propiedades.