Exportar y eliminar OU vacías en Active Directory

Tenemos una implementación de FIM (Forefront Identity Manager) que siempre está haciendo cosas raras.

La última de estas es que debido a un cambio en el ERP fueron creadas cientos de OU vacias en el Active Directory :)

Maravilloso...

Afortunadamente, con PowerShell y ActiveRoles fue muy fácil saber cuáles fueron estas OU. Aquí os dejo el script:

$OUS = Get-QADObject -Type organizationalunit -SizeLimit 0

\$output = @()

foreach(\$OU in \$OUS) {\ \$Children = Get-QADObject -SearchRoot \$OU -LdapFilter "(!(objectClass=organizationalUnit))" -SizeLimit 1 -WarningAction SilentlyContinue | Measure-Object\ \$outputObj = "" | select OU,CanonicalName,HasChildren,Level\ \$outputObj.OU = \$OU.Name\ \$outputObj.CanonicalName = \$OU.CanonicalName

if (\$Children.Count -ne 0) {\ \$outputObj.HasChildren = "Yes"\ }\ else {\ \$outputObj.HasChildren = "No"\ }

\$outputObj.Level = \$OU.CanonicalName.Split("/").Count\ \$output += \$outputObj\ }

\$output | export-csv -notypeinformation -encoding utf8 -delimiter ";" EmptyOUs.csv

Este nos va a exportar un CSV que luego podemos abrir en Excel. En este se muestra la OU, el nombre canónico de la OU, si tiene hijos que no sean otras OU vacías y el nivel de la OU (siendo la raíz del dominio el nivel 0).

Una vez que tenegamos identificadas las OU vacías, podemos exportar el listado de los nombres canónicos de las OU a borrar y borrarlas con el siguiente comando:

LA SIGUIENTE LINEA ES PELIGROSA, ASEGURATE DE TENER UN BACKUP DEL AD ACTUALIZADO ANTES DE EJECUTARLA

get-content -encoding utf8 MiLista.txt | Remove-QADObject -DeleteTree -Force -Confirm:$false