Este comando utiliza el filtro userAccountControl:1.2.840.113556.1.4.803:=512 para seleccionar sólo los usuarios que tienen el bit 512 establecido en su atributo userAccountControl. Este bit indica que el usuario está activo en el directorio activo.
csvde -f C:\Users_Activos.csv -r "(&(objectCategory=person)(userAccountControl:1.2.840.113556.1.4.803:=512))" -l "displayName,memberOf"
------NUEVA VERSION 2026-----
# Importar módulo de AD
Import-Module ActiveDirectory
# Ruta de salida (puedes cambiarla si prefieres)
$Output = "C:\Usuarios_Grupos_Detalle.csv"
# Obtener todos los usuarios habilitados
$Usuarios = Get-ADUser -Filter 'Enabled -eq $true' -Properties Name, SamAccountName, MemberOf, PrimaryGroup
$Resultado = New-Object System.Collections.Generic.List[PSCustomObject]
foreach ($User in $Usuarios) {
# Formatear el login (Sergio_Abarca)
$UserLogin = $User.SamAccountName -replace ' ', '_'
$UserEmail = "$UserLogin@volioytrejos.com"
# 1. Obtener los grupos de la lista "Member Of"
# Convertimos los DistinguishedNames en nombres simples de grupo
$ListaGrupos = @()
if ($User.MemberOf) {
foreach ($GroupDN in $User.MemberOf) {
$GroupName = (Get-ADGroup $GroupDN).Name
$ListaGrupos += $GroupName
}
}
# 2. Agregar el "Primary Group" (usualmente Usuarios del dominio)
# ya que a veces no sale en la lista MemberOf pero sí en la pestaña.
if ($User.PrimaryGroup) {
$PrimaryGroupName = (Get-ADGroup $User.PrimaryGroup).Name
if ($ListaGrupos -notcontains $PrimaryGroupName) {
$ListaGrupos += $PrimaryGroupName
}
}
# 3. Crear una fila por cada grupo encontrado
foreach ($Grupo in $ListaGrupos) {
$Object = [PSCustomObject]@{
Grupo = $Grupo
Usuario = $UserLogin
Nombre = $User.Name
Correo = $UserEmail
Estado = "Activo"
}
$Resultado.Add($Object)
}
}
# Exportar al formato CSV para Excel
$Resultado | Export-Csv -Path $Output -NoTypeInformation -Encoding UTF8 -Delimiter ","
Write-Host "Extraídos $($Resultado.Count) registros de membresía. Archivo: $Output" -ForegroundColor Green