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).ansi
: usa la codificación para la página de códigos ANSI de la referencia cultural actual. Esta opción se agregó en PowerShell 7.4.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.
A partir de PowerShell 7.4, puede usar el Ansi
valor del parámetro Encoding para pasar el identificador numérico de la página de códigos ANSI de la referencia cultural actual sin tener que especificarlo manualmente.
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
Puede canalizar una cadena que contenga una ruta de acceso a este cmdlet.
Salidas
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.