Import-Csv

Crea objetos personalizados de tipo tabla a partir de los elementos de un archivo de valores separados por caracteres (CSV).

Syntax

Import-Csv
      [[-Delimiter] <Char>]
      [-Path] <String[]>
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      [[-Delimiter] <Char>]
      -LiteralPath <String[]>
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      [-Path] <String[]>
      -UseCulture
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      -LiteralPath <String[]>
      -UseCulture
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]

Description

El Import-Csv cmdlet crea objetos personalizados de tipo tabla a partir de los elementos de los archivos CSV. Cada columna del archivo CSV se convierte en una propiedad del objeto personalizado y los elementos de las filas se convierten en los valores de propiedad. Import-Csv funciona en cualquier archivo CSV, incluidos los archivos generados por el Export-Csv cmdlet .

Puede usar los parámetros del Import-Csv cmdlet para especificar la fila de encabezado de columna y el delimitador de elementos, o bien dirigir Import-Csv para usar el separador de lista para la referencia cultural actual como delimitador de elementos.

También puede usar los ConvertTo-Csv cmdlets y ConvertFrom-Csv para convertir objetos en cadenas CSV (y back). Estos cmdlets son los mismos que los Export-CSV cmdlets y Import-Csv , salvo que no tratan con archivos.

Si una entrada de fila de encabezado en un archivo CSV contiene un valor vacío o nulo, PowerShell inserta un nombre de fila de encabezado predeterminado y muestra un mensaje de advertencia.

A partir de PowerShell 6.0, Import-Csv ahora admite el formato de archivo de registro extendido W3C.

Ejemplos

Ejemplo 1: Importación de objetos de proceso

En este ejemplo se muestra cómo exportar y, a continuación, importar un archivo CSV de objetos de proceso.

Get-Process | Export-Csv -Path .\Processes.csv
$P = Import-Csv -Path .\Processes.csv
$P | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name                       MemberType   Definition
----                       ----------   ----------
Equals                     Method       bool Equals(System.Object obj)
GetHashCode                Method       int GetHashCode()
GetType                    Method       type GetType()
ToString                   Method       string ToString()
BasePriority               NoteProperty string BasePriority=8
Company                    NoteProperty string Company=Microsoft Corporation
...

$P | Format-Table

Name                   SI Handles VM            WS        PM        NPM    Path
----                   -- ------- --            --        --        ---    ----
ApplicationFrameHost   4  407     2199293489152 15884288  15151104  23792  C:\WINDOWS\system32\ApplicationFrameHost.exe
...
wininit                0  157     2199112204288 4591616   1630208   10376
winlogon               4  233     2199125549056 7659520   2826240   10992  C:\WINDOWS\System32\WinLogon.exe
WinStore.App           4  846     873435136     33652736  26607616  55432  C:\Program Files\WindowsApps\Microsoft.WindowsStore_11712.1001.13.0_x64__8weky...
WmiPrvSE               0  201     2199100219392 8830976   3297280   10632  C:\WINDOWS\system32\wbem\wmiprvse.exe
WmiPrvSE               0  407     2199157727232 18509824  12922880  16624  C:\WINDOWS\system32\wbem\wmiprvse.exe
WUDFHost               0  834     2199310204928 51945472  87441408  24984  C:\Windows\System32\WUDFHost.exe

El Get-Process cmdlet envía objetos de proceso por la canalización a Export-Csv. El Export-Csv cmdlet convierte los objetos de proceso en cadenas CSV y guarda las cadenas en el archivo Processes.csv. El Import-Csv cmdlet importa las cadenas CSV del archivo Processes.csv. Las cadenas se guardan en la $P variable . La $P variable se envía por la canalización al Get-Member cmdlet que muestra las propiedades de las cadenas CSV importadas. La $P variable se envía a la Format-Table canalización al cmdlet y muestra los objetos .

Ejemplo 2: Especificar el delimitador

En este ejemplo se muestra cómo usar el parámetro Delimiter del Import-Csv cmdlet .

Get-Process | Export-Csv -Path .\Processes.csv -Delimiter :
$P = Import-Csv -Path .\Processes.csv -Delimiter :
$P | Format-Table

El Get-Process cmdlet envía objetos de proceso de la canalización a Export-Csv. El Export-Csv cmdlet convierte los objetos de proceso en cadenas CSV y guarda las cadenas en el archivo Processes.csv. El parámetro Delimiter se usa para especificar un delimitador de dos puntos. El Import-Csv cmdlet importa las cadenas CSV del archivo Processes.csv. Las cadenas se guardan en la $P variable . Para $P que la variable se envíe a la canalización al Format-Table cmdlet .

Ejemplo 3: Especificar la referencia cultural actual para el delimitador

En este ejemplo se muestra cómo usar el Import-Csv cmdlet con el parámetro UseCulture .

(Get-Culture).TextInfo.ListSeparator
Get-Process | Export-Csv -Path .\Processes.csv -UseCulture
Import-Csv -Path .\Processes.csv -UseCulture

El Get-Culture cmdlet usa las propiedades anidadas TextInfo y ListSeparator para obtener el separador de lista predeterminado de la referencia cultural actual. El Get-Process cmdlet envía objetos de proceso de la canalización a Export-Csv. El Export-Csv cmdlet convierte los objetos de proceso en cadenas CSV y guarda las cadenas en el archivo Processes.csv. El parámetro UseCulture usa el separador de lista predeterminado de la referencia cultural actual. El Import-Csv cmdlet importa las cadenas CSV del archivo Processes.csv.

Ejemplo 4: Cambio de nombres de propiedad en un objeto importado

En este ejemplo se muestra cómo usar el parámetro Header de Import-Csv para cambiar los nombres de las propiedades del objeto importado resultante.

Start-Job -ScriptBlock { Get-Process } | Export-Csv -Path .\Jobs.csv -NoTypeInformation
$Header = 'State', 'MoreData', 'StatusMessage', 'Location', 'Command', 'StateInfo', 'Finished',
          'InstanceId', 'Id', 'Name', 'ChildJobs', 'BeginTime', 'EndTime', 'JobType', 'Output',
          'Error', 'Progress', 'Verbose', 'Debug', 'Warning', 'Information'
# Delete the default header from file
$A = Get-Content -Path .\Jobs.csv
$A = $A[1..($A.Count - 1)]
$A | Out-File -FilePath .\Jobs.csv
$J = Import-Csv -Path .\Jobs.csv -Header $Header
$J

State         : Running
MoreData      : True
StatusMessage :
Location      : localhost
Command       : Get-Process
StateInfo     : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : a259eb63-6824-4b97-a033-305108ae1c2e
Id            : 1
Name          : Job1
ChildJobs     : System.Collections.Generic.List`1[System.Management.Automation.Job]
BeginTime     : 12/20/2018 18:59:57
EndTime       :
JobType       : BackgroundJob
Output        : System.Management.Automation.PSDataCollection`1[System.Management.Automation.PSObject]
Error         : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ErrorRecord]
Progress      : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ProgressRecord]
Verbose       : System.Management.Automation.PSDataCollection`1[System.Management.Automation.VerboseRecord]
Debug         : System.Management.Automation.PSDataCollection`1[System.Management.Automation.DebugRecord]
Warning       : System.Management.Automation.PSDataCollection`1[System.Management.Automation.WarningRecord]
Information   : System.Management.Automation.PSDataCollection`1[System.Management.Automation.InformationRecord]

El Start-Job cmdlet inicia un trabajo en segundo plano que ejecuta Get-Process. Un objeto de trabajo se envía a la canalización al Export-Csv cmdlet y se convierte en una cadena CSV. El parámetro NoTypeInformation quita el encabezado de información de tipo de la salida CSV y es opcional en PowerShell v6 y versiones posteriores. La $Header variable contiene un encabezado personalizado que reemplaza los siguientes valores predeterminados: HasMoreData, JobStateInfo, PSBeginTime, PSEndTime y PSJobTypeName. La $A variable usa el Get-Content cmdlet para obtener la cadena CSV del archivo Jobs.csv. La $A variable se usa para quitar el encabezado predeterminado del archivo. El Out-File cmdlet guarda la nueva versión del archivo Jobs.csv en la $A variable . El Import-Csv cmdlet importa el archivo Jobs.csv y usa el parámetro Header para aplicar la $Header variable. La $J variable contiene el PSCustomObject importado y muestra el objeto en la consola de PowerShell.

Ejemplo 5: Creación de un objeto personalizado mediante un archivo CSV

En este ejemplo se muestra cómo crear un objeto personalizado en PowerShell mediante un archivo CSV.

Get-Content -Path .\Links.csv

113207,about_Aliases
113208,about_Arithmetic_Operators
113209,about_Arrays
113210,about_Assignment_Operators
113212,about_Automatic_Variables
113213,about_Break
113214,about_Command_Precedence
113215,about_Command_Syntax
144309,about_Comment_Based_Help
113216,about_CommonParameters
113217,about_Comparison_Operators
113218,about_Continue
113219,about_Core_Commands
113220,about_Data_Section

$A = Import-Csv -Path .\Links.csv -Header 'LinkID', 'TopicTitle'
$A | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
LinkID      NoteProperty string LinkID=113207
TopicTitle  NoteProperty string TopicTitle=about_Aliases

$A | Where-Object -Property TopicTitle -Like '*alias*'

LinkID TopicTitle
------ ----------
113207 about_Aliases

Para crear el archivo Links.csv, use los valores que se muestran en la Get-Content salida.

El Get-Content cmdlet muestra el archivo Links.csv. El Import-Csv cmdlet importa el archivo Links.csv. El parámetro Header especifica los nombres de propiedad LinkId y TopicTitle. Los objetos se almacenan en la $A variable . El Get-Member cmdlet muestra los nombres de propiedad del parámetro Header . El Where-Object cmdlet selecciona objetos con la propiedad TopicTitle que incluye alias.

Ejemplo 6: Importación de un CSV que falta un valor

En este ejemplo se muestra cómo responde el Import-Csv cmdlet de PowerShell cuando la fila de encabezado de un archivo CSV incluye un valor nulo o vacío. Import-Csv sustituye un nombre predeterminado para la fila de encabezado que falta que se convierte en el nombre de propiedad del objeto que Import-Csv devuelve.

Get-Content -Path .\Projects.csv

ProjectID,ProjectName,,Completed
13,Inventory,Redmond,True
440,,FarEast,True
469,Marketing,Europe,False

Import-Csv -Path .\Projects.csv

WARNING: One or more headers were not specified. Default names starting with "H" have been used in
place of any missing headers.

ProjectID ProjectName H1      Completed
--------- ----------- --      ---------
13        Inventory   Redmond True
440                   FarEast True
469       Marketing   Europe  False

(Import-Csv -Path .\Projects.csv).H1

WARNING: One or more headers were not specified. Default names starting with "H" have been used in
place of any missing headers.
Redmond
FarEast
Europe

Para crear el archivo Projects.csv, use los valores que se muestran en la salida del Get-Content ejemplo.

El Get-Content cmdlet muestra el archivo Projects.csv. Falta un valor de la fila de encabezado entre ProjectName y Completed. El Import-Csv cmdlet importa el archivo Projects.csv y muestra un mensaje de advertencia porque H1 es un nombre de encabezado predeterminado. El (Import-Csv -Path .\Projects.csv).H1 comando obtiene los valores de propiedad H1 y muestra una advertencia.

Parámetros

-Delimiter

Especifica el delimitador que separa los valores de propiedad en el archivo 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. Para especificar caracteres especiales con escape como tabulación (`t), escríbalo entre comillas dobles.

Si especifica un carácter distinto del delimitador de cadena real en el archivo, Import-Csv no podrá crear los objetos a partir de las cadenas CSV y devolverá las cadenas CSV.

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

-Encoding

Especifica la codificación para el archivo CSV importado. El valor predeterminado es utf8NoBOM.

Los valores aceptables para este parámetro son los siguientes:

  • ascii: usa la codificación para el juego de caracteres ASCII (7 bits).
  • bigendianunicode: codifica en formato UTF-16 mediante el orden de bytes big-endian.
  • bigendianutf32: codifica en formato UTF-32 mediante el orden de bytes big-endian.
  • oem: usa la codificación predeterminada para los programas de consola y MS-DOS.
  • unicode: codifica en formato UTF-16 mediante el orden de bytes little-endian.
  • utf7: codifica en formato UTF-7.
  • utf8: codifica en formato UTF-8.
  • utf8BOM: codifica en formato UTF-8 con marca de orden de bytes (BOM)
  • utf8NoBOM: codifica en formato UTF-8 sin marca de orden de bytes (BOM)
  • utf32: codifica en formato UTF-32.

A partir de PowerShell 6.2, el parámetro Encoding también permite identificadores numéricos de páginas de códigos registradas (como -Encoding 1251) o nombres de cadena de páginas de códigos registradas (como -Encoding "windows-1251"). Para obtener más información, consulte la documentación de .NET para Encoding.CodePage.

Nota:

Ya no se recomienda usar UTF-7*. A partir de PowerShell 7.1, se escribe una advertencia si especifica utf7 para el parámetro Encoding .

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Header

Especifica una fila de encabezado de columna alternativa para el archivo importado. El encabezado de columna determina los nombres de propiedad de los objetos creados por Import-Csv.

Escriba encabezados de columna como una lista separada por caracteres. No escriba la cadena de encabezado entre comillas. Incluya cada encabezado de columna entre comillas simples.

Si escribe menos encabezados de columna de los que hay columnas de datos, se descartan las columnas de datos restantes. Si escribe más encabezados de columna de los que hay columnas de datos, los encabezados de columna adicionales se crean con columnas de datos vacías.

Al usar el parámetro Header , elimine la fila de encabezado original del archivo CSV. De lo contrario, Import-Csv crea un objeto adicional a partir de los elementos de la fila de encabezado.

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

-LiteralPath

Especifica la ruta de acceso al archivo CSV que se va a importar. A diferencia de Path, el valor del parámetro LiteralPath se usa exactamente como se escribe. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso contiene caracteres de escape, escríbalos entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Path

Especifica la ruta de acceso al archivo CSV que se va a importar. También puede canalizar una ruta de acceso a Import-Csv.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
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:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Entradas

String

Puede canalizar una cadena que contenga una ruta de acceso a este cmdlet.

Salidas

Object

Este cmdlet devuelve los objetos descritos por el contenido del archivo CSV.

Notas

PowerShell incluye los siguientes alias para Import-Csv:

  • Todas las plataformas:
    • ipcsv

Dado que los objetos importados son versiones CSV del tipo de objeto, no se reconocen ni dan formato a las entradas de formato de tipo de PowerShell que dan formato a las versiones que no son CSV del tipo de objeto.

El resultado de un Import-Csv comando es una colección de cadenas que forman un objeto personalizado similar a una tabla. Cada fila es una cadena independiente, por lo que puede usar la propiedad Count del objeto para contar las filas de la tabla. Las columnas son las propiedades del objeto y los elementos de las filas son los valores de la propiedad.

La fila de encabezado de columna determina el número de columnas y los nombres de columna. Los nombres de columna también son los nombres de las propiedades de los objetos. La primera fila se interpreta como encabezados de columna, a menos que use el parámetro Header para especificar encabezados de columna. Si cualquier fila tiene más valores que la fila de encabezado, se omiten los valores adicionales.

Si la fila del encabezado de columna falta un valor o contiene un valor nulo o vacío, Import-Csv usa H seguido de un número para el nombre de propiedad y el encabezado de columna que faltan.

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

Import-Csv también admite el formato de registro extendido de W3C. Las líneas a partir # de se tratan como comentarios y se omiten a menos que el comentario comience por #Fields: y contenga una lista delimitada de nombres de columna. En ese caso, el cmdlet usa esos nombres de columna. Este es el formato estándar para Windows IIS y otros registros de servidor web. Para obtener más información, consulte Formato de archivo de registro extendido.