ConvertTo-Csv
Convierte objetos .NET en una serie de cadenas de valores separados por caracteres (CSV).
Sintaxis
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.
Tipo: | Char |
Posición: | 1 |
Valor predeterminado: | comma (,) |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | SwitchParameter |
Alias: | ITI |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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
.
Tipo: | PSObject |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | 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.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | SwitchParameter |
Alias: | NTI |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | String[] |
Alias: | QF |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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
.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | Microsoft.PowerShell.Commands.BaseCsvWritingCommand+QuoteKind |
Alias: | UQ |
Posición: | Named |
Valor predeterminado: | Always |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
Entradas
Puede canalizar cualquier objeto que tenga un adaptador del Sistema de tipos extendidos (ETS) a este cmdlet.
Salidas
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.