Compartir a través de


Import-Csv

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

Sintaxis

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 cmdlet Import-Csv crea objetos personalizados similares a tablas a partir de los elementos de 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 cmdlet Export-Csv.

Puede usar los parámetros del cmdlet Import-Csv para especificar la fila de encabezado de columna y el delimitador de elemento, o indicar a Import-Csv que use el separador de lista para la cultura actual como delimitador de elemento.

También puede usar los cmdlets ConvertTo-Csv y ConvertFrom-Csv para convertir objetos en cadenas CSV (y atrás). Estos cmdlets son los mismos que los cmdlets Export-CSV y Import-Csv, excepto que funcionan con datos de la canalización en lugar de 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, ahora Import-Csv 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 cmdlet Get-Process envía objetos de proceso por la canalización hacia el Export-Csv. El cmdlet Export-Csv convierte los objetos de proceso en cadenas CSV y guarda las cadenas en el archivo Processes.csv. El cmdlet Import-Csv importa las cadenas CSV del archivo Processes.csv. Las cadenas se guardan en la variable $P. La variable $P se envía a través de la canalización al cmdlet Get-Member, que se encarga de mostrar las propiedades de las cadenas importadas desde un CSV. La variable $P se envía por la canalización hacia el cmdlet Format-Table, que muestra los objetos.

Ejemplo 2: Especificar el delimitador

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

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

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

Ejemplo 3: Especificar la referencia cultural actual para el delimitador

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

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

El cmdlet Get-Culture usa las propiedades anidadas TextInfo y ListSeparator para obtener el separador de lista predeterminado de la cultura actual. El cmdlet Get-Process envía objetos de proceso por la canalización a Export-Csv. El cmdlet Export-Csv convierte los objetos de proceso en cadenas CSV y guarda las cadenas en el archivo Processes.csv. El parámetro UseCulture utiliza el separador de lista predeterminado de la configuración regional actual. El cmdlet Import-Csv 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 para cambiar los nombres de las propiedades en el 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 cmdlet Start-Job inicia un trabajo en segundo plano que ejecuta Get-Process. Un objeto de tarea se envía a través de la canalización al cmdlet Export-Csv 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 variable $Header contiene un encabezado personalizado que reemplaza los siguientes valores predeterminados: HasMoreData, JobStateInfo, PSBeginTime, PSEndTimey PSJobTypeName. La variable $A usa el cmdlet Get-Content para obtener la cadena CSV del archivo Jobs.csv. La variable $A se usa para quitar el encabezado predeterminado del archivo. El cmdlet Out-File guarda la nueva versión del archivo Jobs.csv en la variable $A. El cmdlet importa el archivo Jobs.csv y usa el parámetro header para aplicar la variable . La variable $J 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 salida Get-Content.

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

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

En este ejemplo se muestra cómo responde el cmdlet Import-Csv en PowerShell cuando la fila de encabezado de un archivo CSV incluye un valor nulo o vacío. Import-Csv sustituye un nombre predeterminado por 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 weren't 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

El cmdlet Get-Content muestra el archivo Projects.csv. Falta un valor entre ProjectName y Completed en la fila del encabezado. El cmdlet Import-Csv importa el archivo Projects.csv y muestra un mensaje de advertencia porque H1 es un nombre de encabezado predeterminado.

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 un signo de dos puntos (:). Para especificar un punto y coma (;) lo incluye entre comillas simples. Para especificar caracteres especiales con escape, como tab (`t), escríbalo entre comillas dobles.

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

Tipo:Char
Posición:1
Valor predeterminado:comma (,)
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín: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: utiliza la codificación para el juego de caracteres (de 7 bits) de ASCII.
  • ansi: utiliza la codificación para la página de códigos ANSI de la cultura actual. Esta opción se agregó en PowerShell 7.4.
  • bigendianunicode: codifica en formato UTF-16 utilizando el orden de bytes big-endian.
  • bigendianutf32: codifica en formato UTF-32 utilizando el orden de bytes big-endian.
  • oem: usa la codificación predeterminada para MS-DOS y programas de consola.
  • unicode: codifica en formato UTF-16 utilizando 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 Codificación 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.

A partir de PowerShell 7.4, puede usar el valor Ansi para el parámetro Encoding y pasar el identificador numérico de la página de códigos ANSI de la referencia cultural actual sin tener que especificarlo manualmente.

Nota

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

Tipo:Encoding
Valores aceptados:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Posición:Named
Valor predeterminado:UTF8NoBOM
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín: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 incluya 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.

Tipo:String[]
Posición:Named
Valor predeterminado:None
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín: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 incluye caracteres de escape, escríbala entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.

Tipo:String[]
Alias:PSPath, LP
Posición:Named
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín: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.

Tipo:String[]
Posición:0
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:False

-UseCulture

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

Tipo:SwitchParameter
Posición:Named
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

Entradas

String

Puede canalizar una cadena que contiene 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 comando Import-Csv 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 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 los encabezados de columna, a menos que use el parámetro Header para especificar los encabezados de columna. Si alguna fila tiene más valores que la fila de encabezado, se omiten los valores adicionales.

Si falta un valor en la fila de encabezado de columna 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 ToString() método 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 W3C. Las líneas que comienzan con el carácter hash (#) se tratan como comentarios y se omiten a menos que el comentario comience con #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, vea Formato de Archivo de Registro Extendido.