Usar Import-CSV en PowerShell no se limita a leer datos; es fundamental para automatizar tareas masivas en Active Directory, Exchange o cualquier otro sistema que utilice datos estructurados. Si alguna vez has intentado actualizar manualmente la información de usuario en decenas de cuentas, lo agradecerás: importar un CSV con todos tus usuarios y editarlos a la vez puede ahorrarte mucho tiempo, especialmente al gestionar decenas o cientos de entradas. Además, ayuda a mantener la coherencia en lugar de errores tipográficos manuales. Ten en cuenta que, a veces, la codificación o la configuración regional pueden causar problemas, por lo que saber cómo ajustar la codificación o los delimitadores puede ser fundamental.
Ahora bien, si tiene una hoja de Excel con información de usuario (por ejemplo, nombres de usuario, correos electrónicos, teléfonos y departamentos) guardada como CSV, lo importante es importar esos datos a PowerShell. Desde allí, puede recorrer cada fila para actualizar los usuarios de AD o realizar otras operaciones por lotes. Resulta muy práctico cuando necesita modificar atributos de usuario de forma masiva sin tener que navegar durante horas por los usuarios y equipos de AD.
Cómo usar Import-CSV en PowerShell para la gestión de usuarios
Cómo importar y leer sus datos CSV
Primero, debes elegir la ruta de tu archivo CSV, como C:\PS\my_ad_users.csv. Al ejecutar:
$ADUsers = Import-CSV -Path C:\PS\my_ad_users.csv
Este comando carga tu CSV en una variable, convirtiendo cada fila en un PSCustomObject. Es un poco extraño, pero en algunos equipos, esto podría fallar si la codificación no es correcta o si los delimitadores no están bien definidos, así que revisa la codificación de tu CSV (UTF-8 es la más segura si trabajas con caracteres especiales).Otra cosa: si tu CSV usa punto y coma en lugar de comas, añade -Delimiter ';': ten en cuenta que el delimitador predeterminado es la coma, que es el estándar en la mayoría de los casos.
¿Quieres comprobar lo que acabas de importar? Llama $ADUsers | Get-Memberpara ver qué propiedades están disponibles, como ADlogin, Email, Phone, etc. Porque, por supuesto, PowerShell trata cada fila como un objeto: puedes acceder a una columna como $_. Emailo listar varias columnas con Select-Object.
Cómo corregir la codificación y los delimitadores si los datos no se ven bien
¿Has oído hablar de errores de codificación? Sí, a veces los caracteres especiales o las escrituras no latinas se confunden si no se especifica la codificación correcta. En ese caso, prueba a añadir algo -Encoding UTF8como esto:
Import-CSV -Path C:\PS\my_ad_users.csv -Encoding UTF8
Además, para los delimitadores, si el CSV no está separado por comas, simplemente especifique el correcto. Por ejemplo, con punto y coma:
$ADUsers = Import-CSV -Path C:\PS\my_ad_users.csv -Delimiter ';'
Y si no está seguro acerca del delimitador, vea (Get-Culture).TextInfo. ListSeparatorcuál es el valor predeterminado de su región: normalmente será una coma, pero algunas regiones usan punto y coma.
Cómo acceder y usar datos desde su CSV
Una vez importado, obtendrá una matriz de objetos. Puede mostrar todas las propiedades con $ADUsers | Get-Member. Para listar todos los correos electrónicos:
$ADUsers. Email
Y si quieres columnas específicas, selecciónalas con [nombre del usuario Select-Object], lo que facilita ver con qué estás trabajando. Si necesitas un usuario específico, como la cuarta fila, simplemente ejecuta $ADUsers[3][nombre del usuario] (recuerda que empieza desde cero).Esto es útil si quieres depurar o verificar datos específicos antes de ejecutar cambios masivos.
Cómo actualizar usuarios de AD de forma masiva
Bien, aquí es donde la teoría se pone en práctica: actualizar a los usuarios según ese CSV. El plan es recorrer cada registro y ejecutar un cmdlet como Set-ADUser. Porque, por supuesto, esto requiere el módulo de Active Directory instalado y los permisos adecuados.
He aquí un bucle típico:
# Loop through each user in the CSV and update AD attributes $ADUsers | ForEach-Object { Set-ADUser -Identity $_. ADlogin ` -MobilePhone $_. Phone ` -Department $_. Department ` -EmailAddress $_. Email }
Tenga en cuenta que, a veces, sobre todo si su CSV contiene datos faltantes o incorrectos, podría obtener errores o actualizaciones parciales. En algunas configuraciones, es útil añadir comprobaciones o bloques try-catch. Además, si realiza muchas actualizaciones, probablemente sea mejor ejecutarlas por etapas o probar primero con un lote pequeño.
Alternativamente, si prefieres una sintaxis más corta, puedes ingresar directamente en un bucle foreach:
Import-CSV C:\PS\my_ad_users.csv | ForEach-Object { Set-ADUser -Identity $_. AdLogin -MobilePhone $_. Phone -Department $_. Department -EmailAddress $_. Email }
Esto funciona bien siempre que los datos sean consistentes y su CSV tenga el formato correcto.
Agregar información adicional o datos personalizados
A veces, puede que quieras incluir información adicional, como la fecha actual, como una nueva propiedad en cada objeto. Puedes hacerlo añadiendo un miembro:
$ADUsers | Add-Member -MemberType NoteProperty -Name Date -Value (Get-Date -Format dd/MM/yyyy)
¿Por qué no? Simplemente facilita el seguimiento de los cambios posteriormente. Pero recuerda que estos datos adicionales permanecen en tus objetos en memoria a menos que los exportes o los guardes en algún lugar.
Algunos otros casos de uso útiles
- Exportación masiva de buzones de correo: New-MailboxExportRequest con datos de un CSV.
- Agregue varios usuarios a grupos de AD o grupos de ID de Microsoft Entra de una sola vez, utilizando archivos CSV y el mismo enfoque de bucle.
Sinceramente, una vez que te familiarizas con la importación de archivos CSV y su procesamiento, automatizar tareas se vuelve mucho más rápido. Solo ten cuidado con los problemas de codificación y las discrepancias de delimitadores: son pequeñas molestias comunes.
Resumen
- Compruebe siempre su codificación CSV (UTF8 es el más seguro).
- Especifique el delimitador correcto si no es una coma.
- Úselo
Get-Memberpara explorar sus datos importados. - Recorra sus datos
ForEach-Objectpara automatizar cambios masivos.
Resumen
Ojalá esto le ahorre algunas horas a alguien. Una vez que domines el patrón (importar CSV, repetir, actualizar), te preguntarás por qué lo hiciste manualmente. Solo ten cuidado, prueba primero con lotes pequeños y siempre haz una copia de seguridad de los datos de AD si es posible.¡Mucha suerte! La automatización por lotes ahorra mucho tiempo una vez que veas cómo funciona en la práctica.