Cómo usar Import-CSV en PowerShell

Cuando trabajamos con PowerShell, podemos usar archivos CSV para importar datos a los sistemas o usarlos como una lista de referencia, de usuarios, por ejemplo, para actualizar u obtener configuraciones. Para ello usamos la función Importar-CSV en PowerShell.

La función Import-CSV convierte los datos CSV en un objeto personalizado en PowerShell.

De esta manera, podemos recorrer fácilmente cada fila del archivo CSV y usar los datos en nuestros scripts.

En este artículo, veremos cómo leer un archivo CSV con PowerShell, utilizando la función Import-CSV, y cómo leer cada línea con el cmdlet foreach.

También le daré algunos consejos sobre cómo usar la función Importar CSV.

Importación de PowerShell-CSV

El cmdlet Import-CSV es bastante sencillo y solo tiene algunas propiedades que son útiles:

  • Sendero – (Obligatorio) Ubicación del archivo CSV
  • delimitador – Coma por defecto, pero esto te permite cambiarla
  • Encabezamiento – Le permite definir encabezados personalizados para las columnas. Utilizado como nombres de propiedad
  • UsoCultura – Utilice el delimitador predeterminado de su sistema
  • Codificación – Especifique la codificación del archivo CSV importado

Vamos a comenzar con una lista simple de usuarios que podemos importar en PowerShell. Creé el siguiente archivo CSV que usaré en los siguientes ejemplos:

UserPrincipalName,"DisplayName","Title","UserType","IsLicensed"
[email protected],"Lee Gu","jr engineer","Member","True"
[email protected],"Megan Bowen","recruiter","Member","True"
[email protected],"Grady Archie","sr engineer","Member","True"
[email protected],"Miriam Graham","Director","Member","True"
[email protected],"openmailbox",,"Member","False"
[email protected],"Johanna Lorenz","Senior Engineer","Member","True"
[email protected],"Joni Sherman","recruiter","Member","False"
[email protected],"Alex Wilber","Marketing Assistant","Member","True"
[email protected],"Isaiah Langer","Sales Rep","Member","True"

Este archivo CSV ya tenía encabezados para cada columna, por lo que no debemos preocuparnos por eso por ahora. Para importar este archivo CSV a PowerShell, simplemente podemos usar el siguiente comando:

Import-CSV -Path c:\temp\test.csv | ft

En este caso, no almacenamos los resultados en una variable, sino que los mostramos inmediatamente en una tabla con ft. Como puede ver, ahora tenemos todos nuestros usuarios con todas las columnas muy bien en PowerShell.

powershell importar csv

Si almacena los resultados del cmdlet de importación en una variable, puede hacer referencia a cada columna como una propiedad usando el nombre de la columna (encabezado):

$users = Import-Csv -Path c:\temp\test.csv
$users.DisplayName
powershell leer csv

Especificación del delimitador

Un problema común cuando se trata de importar un archivo CSV con PowerShell es que no se reconoce el delimitador.

De forma predeterminada, el cmdlet Import-CSV utiliza el , como el delimitado. Pero aquí en los Países Bajos, por ejemplo, el delimitador predeterminado en Excel para archivos CSV es ;.

Entonces, cuando creo un archivo CSV en Excel que quiero usar en PowerShell, tendré que cambiar el delimitador en el archivo CSV o especificar el delimitador correcto en PowerShell. Hay dos opciones para esto.

Podemos usar el -delimiter parámetro para especificar el delimitador correcto:

$users = Import-Csv -Path c:\temp\test.csv -Delimiter ;

O use el delimitador predeterminado del sistema con el -UseCulture parámetro:

$users = Import-Csv -Path c:\temp\test.csv -UseCulture

Si desea saber cuál es el delimitador predeterminado en su computadora, puede usar el siguiente comando de PowerShell para obtener la información cultural:

(Get-Culture).TextInfo.ListSeparator
Obtener powershell delimitador

Powershell Importar CSV para cada uno

La mayoría de las veces, cuando importa un archivo CSV en PowerShell, desea recorrer cada línea del archivo CSV.

Por ejemplo, para obtener los permisos del buzón o el tamaño de la carpeta de OneDrive.

Para ello podemos combinar el cmdlet Importar CSV con ForEach. Dentro del bloque ForEach, podemos hacer referencia a cada columna del archivo CSV como una propiedad del objeto de usuario en este caso.

Tomando el ejemplo del archivo CSV que agregué al comienzo del artículo, podemos obtener el buzón de cada usuario usando UserPrincipalName así:

Import-CSV -Path C:\temp\test.csv | ForEach {
    # Get mailbox of each user
    Get-ExoMailbox -identity $_.UserPrincipalName
}

Para que esto funcione, su archivo CSV deberá tener encabezados. Ese no es siempre el caso, a veces los archivos CSV solo contienen valores y ningún encabezado.

Para seguir haciendo referencia a cada valor en el archivo CSV, deberá agregar encabezados al cmdlet del archivo Import-CSV.

Agregar encabezados a Import-CSV

Tomemos el siguiente archivo CSV con los nombres de los servidores y la dirección IP del servidor:

la-ams-ad01,10.15.0.1
la-ams-file02,10.15.0.3
la-ams-db01,10.15.0.4
la-osl-ad01,10.12.0.1
la-osl-file01,10.12.0.5

Como puede ver, este archivo CSV no tiene encabezados (nombres de columna). Entonces, cuando importemos este archivo CSV directamente en PowerShell, verá que la primera fila se usa como encabezado. Esto no va a funcionar.

powershell importar csv

Entonces, lo que debemos hacer es definir los encabezados para el archivo CSV. Tendremos que enumerar todos los encabezados en una cadena separada por comas, encerrando cada nombre de encabezado con comillas simples ' .

Import-Csv -Path c:\temp\server.csv -Header 'ServerName','IpAddress'
importar csv con encabezados

Es importante saber que si no especifica todos los encabezados, las columnas restantes no se importan. Entonces, si expandimos nuestro archivo CSV con las siguientes columnas:

la-ams-ad01,10.15.0.1,HP,DL365 G10
la-ams-file02,10.15.0.3,HP,DL380 G9
la-ams-db01,10.15.0.4,HP,DL385 G10
la-osl-ad01,10.12.0.1,HP,DL110 G8
la-osl-file01,10.12.0.5,HP,DL345 G10

Y solo especifique tres encabezados de columna, luego la última columna, modelo de servidor en este caso, no se importará:

Import-Csv -Path c:\temp\server.csv -Header 'ServerName','Ip','Brand'

# Result:
ServerName    Ip        Brand
----------    --        -----
la-ams-ad01   10.15.0.1 HP
la-ams-file02 10.15.0.3 HP
la-ams-db01   10.15.0.4 HP
la-osl-ad01   10.12.0.1 HP
la-osl-file01 10.12.0.5 HP

Si define más encabezados que columnas, se crea una propiedad vacía adicional para cada objeto.

Esto puede ser útil si desea crear un objeto con campos adicionales que desea completar más adelante.

Por ejemplo, si desea buscar el espacio en disco de cada servidor, ya podemos agregar la columna de espacio en disco a los datos importados:

Import-Csv -Path c:\temp\server.csv -Header 'ServerName','Ip','Brand','Model','DiskSpace' | ft

# Result
ServerName    Ip        Brand Model     DiskSpace
----------    --        ----- -----     ---------
la-ams-ad01   10.15.0.1 HP    DL365 G10
la-ams-file02 10.15.0.3 HP    DL380 G9
la-ams-db01   10.15.0.4 HP    DL385 G10
la-osl-ad01   10.12.0.1 HP    DL110 G8
la-osl-file01 10.12.0.5 HP    DL345 G10

Esto permite hacer lo siguiente, por ejemplo:

$servers = Import-Csv -Path c:\temp\server.csv -Header 'ServerName','Ip','Brand','Model','DiskSpace'

$servers | ForEach {
    $_.DiskSpace = Invoke-Command -ComputerName $_.ServerName {Get-PSDrive C} | Select-Object Free
}

Cómo importar solo campos específicos con Import-CSV

Cuando importa un archivo CSV a PowerShell, importará todas las columnas de forma predeterminada. Pero cuando se trabaja con archivos grandes, puede ser útil seleccionar solo los datos que realmente necesita.

Hay dos formas de hacer esto, si su archivo CSV tiene encabezados, puede seleccionar solo la columna que necesita:

Import-Csv -Path c:\temp\test.csv | select DisplayName,Title | Ft
Powershell Importar CSV para cada uno

Otra opción es utilizar el -header parámetro, pero esto solo funciona bien cuando solo necesita la primera columna (o el primer par de columnas). Porque no puedes saltarte una columna con este método:

Import-Csv -Path c:\temp\test.csv -Header id

# Result
id
--
UserPrincipalName
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

Terminando

El cmdlet Import-CSV en PowerShell es realmente útil cuando necesita trabajar con listas o desea buscar varias entidades.

Asegúrese de verificar si el archivo CSV viene con encabezados y de usar el delimitador correcto.

Si tiene alguna pregunta, simplemente deje un comentario a continuación.

Otros artículos relacionados

Cómo conseguir usuarios de Azure AD con PowerShell

Cómo conseguir usuarios de Azure AD con PowerShell

A partir de diciembre de 2022, necesitaremos usar el cmdlet Get MgUser para obtener y exportar nuestros usuarios de Azure ...
Leer Más
Cómo instalar el módulo Microsoft Graph en PowerShell

Cómo instalar el módulo Microsoft Graph en PowerShell

La API de Microsoft Graph nos permite interactuar con todos los servicios de Microsoft a través de una única fuente ...
Leer Más
Explicación del cliente PowerShell SSH y la comunicación remota

Explicación del cliente PowerShell SSH y la comunicación remota

¿Necesita administrar un servidor remoto o un dispositivo de red? Entonces probablemente esté usando SSH para conectarse y administrarlos. El ...
Leer Más
Obtenga el estado de MFA de los usuarios de Office 365 con Microsoft Graph

Obtenga el estado de MFA de los usuarios de Office 365 con Microsoft Graph

Hacer un seguimiento del estado de MFA de su usuario es importante para mantener protegido a su arrendatario. Por ahora, ...
Leer Más
Obtenga el informe de métricas de almacenamiento de OneDrive con PowerShell

Obtenga el informe de métricas de almacenamiento de OneDrive con PowerShell

¿Sabe cuánto almacenamiento de OneDrive utilizan sus usuarios? Probablemente no, y en la mayoría de los casos, tampoco importa. Obtienen ...
Leer Más
Cómo verificar su versión de PowerShell

Cómo verificar su versión de PowerShell

¿Está usando la versión 5.1 o ya cambió a la versión 7 de PowerShell? La versión de PowerShell que haya ...
Leer Más

Deja un comentario