Exportar usuarios de Active Directory a CSV con PowerShell (por OU o todo el dominio)
Guía práctica para generar reportes de usuarios desde Active Directory y exportarlos a CSV con PowerShell. Incluye filtro por OU, columnas útiles y ejemplos listos.
samAccountName, estado, fechas y más.Requisitos
- Equipo unido al dominio con acceso al controlador de dominio.
- RSAT instaladas (incluye el módulo
ActiveDirectorypara PowerShell). - PowerShell iniciado como Administrador.
- Permisos para leer objetos de AD en las OUs requeridas.
Script completo
Este script exporta usuarios desde AD a un archivo CSV, respetando el separador regional (-UseCulture) y asegurando la carpeta de salida. Permite filtrar por una OU concreta o abarcar todo el dominio.
param(
[string]$Ruta = "C:\Temp\Usuarios_AD_$((Get-Date).ToString('dd_MM_yyyy_HHmm')).csv",
[string]$OU = "OU=Users,OU=MX,DC=contoso,DC=local" # Deja vacío para todo el dominio. Ej: "OU=Users,OU=MX,DC=contoso,DC=local"
)
Import-Module ActiveDirectory
# Asegura carpeta
$carpeta = Split-Path $Ruta -Parent
if (-not (Test-Path $carpeta)) { New-Item -ItemType Directory -Path $carpeta | Out-Null }
$props = @('mail','displayName','samAccountName',
'enabled','whenCreated','passwordLastSet','lastLogonDate','department','title','DistinguishedName')
$baseCmd = @{
Filter = '*'
Properties = $props
}
if ($OU) {
$baseCmd.SearchBase = $OU
$baseCmd.SearchScope = 'Subtree'
}
Get-ADUser @baseCmd |
Select-Object displayName,samAccountName,mail,enabled,
whenCreated,passwordLastSet,lastLogonDate,department,title,DistinguishedName |
Export-Csv $Ruta -NoTypeInformation -Encoding UTF8 -UseCulture
Write-Host "Exportado a: $Ruta"Parámetros y columnas
- $Ruta: ruta del CSV de salida. Incluye fecha y hora por defecto para evitar sobrescribir.
- $OU: DN de la unidad organizativa base (ej.
OU=Users,OU=MX,DC=contoso,DC=local). Si lo dejas vacío, recorre todo el dominio.
Columnas exportadas: displayName, samAccountName, mail, enabled, whenCreated, passwordLastSet, lastLogonDate, department, title, DistinguishedName.
Cómo usarlo (ejemplos rápidos)
1) Exportar todo el dominio
.\Exportar-Usuarios-AD.ps1 -OU ""2) Exportar solo una OU específica
.\Exportar-Usuarios-AD.ps1 -OU "OU=Users,OU=MX,DC=contoso,DC=local"3) Cambiar carpeta de salida
.\Exportar-Usuarios-AD.ps1 -Ruta "C:\Temp\Usuarios_AD_$(Get-Date -Format yyyyMMdd_HHmm).csv" -OU ""Variaciones útiles
Filtrar solo usuarios habilitados
Get-ADUser @baseCmd | Where-Object {$_.Enabled -eq $true} | Select-Object ... | Export-Csv ...Agregar más propiedades (teléfono, ciudad, manager)
$props += 'telephoneNumber','city','manager'Dominios grandes (paginación y velocidad)
- Agrega
-ResultSetSize $nullaGet-ADUserpara no limitar resultados. - Especifica un DC:
Get-ADUser @baseCmd -Server DC01.contoso.local.
Solución de problemas
- Import-Module ActiveDirectory falla: instala RSAT en Windows 10/11 (Características opcionales) o agrega la característica en Windows Server.
- Access denied: verifica que tu usuario tenga permisos de lectura en las OUs objetivo.
- CSV con separador incorrecto: el script usa
-UseCulturepara respetar tu configuración regional. Si prefieres coma, elimina-UseCulturey agrega-Delimiter ",".
Nota de seguridad y privacidad
El CSV puede contener información sensible (nombres, correos, cargos). Almacénalo en un repositorio seguro con los permisos adecuados y define un tiempo de retención.
Conclusión
Con este script tienes un reporte de usuarios de Active Directory confiable y repetible. Puedes adaptarlo con más columnas, filtros y programación para tus necesidades de auditoría y administración.

