LDAP Anfragen in PowerShell mit dem DirectorySearcher

Oft kommt es vor, dass Informationen über viele Nutzer im Active Directory abgefragt werden sollen.

Dies ist beispielsweise nötig, um per Skript die Nutzer einer bestimmten OU abzufragen, oder um Active Directory Attribute für alle Nutzer zu setzen.

Das .Net Framework bietet hierzu die Klasse „DirectorySearcher“, welche in allen .Net Sprachen, wie z.B. C# oder PowerShell verwendet werden kann.

Beachten Sie, dass dieses Skript lediglich die Basics des DirectorySearchers beinhaltet. Die Konfigurationsmöglichkeiten des DirectorySearchers können sehr komplex werden. Weitere Informationen finden Sie in der Dokumentation des DirectorySearchers. Ebenso findet in diesem Beispielskript keine Fehlerbehandlung statt. Im Produktivbetrieb sollte unbedingt auf eine korrekte Fehlerbehandlung Wert gelegt werden.

#Definiert den LDAP Suchpfad. In diesem Beispiel, alle Elemente in der Organisationseinheit "Studenten"
$OU = "LDAP://OU=Studenten,DC=contoso,DC=com"
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
 
#Setzt den LDAP Suchpfad auf das DirectorySearcher Objekt
$objSearcher.SearchRoot = New-Object System.DirectoryServices.DirectoryEntry($OU)
 
#Filtert die Suche nach Benutzern, also keine Gruppen oder Computer
$objSearcher.Filter = "(&(objectCategory=User))"
 
#Aktiviert die rekursive Suche in Sub-OUs
$objSearcher.SearchScope = "Subtree"

#Setzt die maximale Anzahl an zurückgegebenen Nutzern auf 10000 (Standard ist 2000)
$objSearcher.PageSize = 10000;
$users = $objSearcher.FindAll()
#Iteriert die gefundenen Nutzer und gibt für jeden Nutzer den Login-Namen aus
foreach ($u in $users){
    $accountName = $u.Properties["samaccountname"]
    write-host $accountName
} 

Im Beispiel werden lediglich die Nutzernamen (SAM Account Name) ausgegeben. Weitere Active Directory Attribute können Sie hier nachlesen.