Active Directory LDAP Queries über ADSI Searcher

Tägliche Abfragen im Unternehmen innerhalb eines Active Directorys werden zum Großteil über die Schnittstelle ADWS (Active Directory Web Services) abgehandelt. Dies ist ein Windows-Dienst, welcher eine Webschnittstelle für Ihre Active Directory-Domänen bereitstellt. Cmdlet Eingaben wie Get-ADObjects oder Get-ADUser sind an der Tagesordnung. Für den Zugriff auf ADWS muss der TCP-Port 9389 auf dem Domain Controller geöffnet sein.

Oftmals steht man aber im Unternehmen vor dem Problem, dass eine Abfrage über die Active Directory Web Services nicht möglich oder freigebeben ist.

ADSISearcher bzw. System.Directoryservices.Directorysearcher bietet viel Möglichkeiten mit den Eigenschaften und Methoden eines LDAP-Queries umzugehen.

Aus diesem Grund zeigen wir hier den generellen Abruf einer solchen Abfrage auf und erläutern diese kurz.

# Definition von Domain Controller & AD Domain
$SourceForest = "GC://dcen01.example.com/dc=dcen01,dc=example,dc=com"
# LDAP-Syntax Suchfilter: "&" nutzen wir für eine "and" Abfrage, "|" wird gesetzt für eine "or" Abfrage
$strFilter = "(&(objectCategory=User)(|(samaccountname=xyz*)(samaccountname=abc*)))"
# Definition der Object Domain
$objDomain = New-Object System.DirectoryServices.DirectoryEntry($SourceForest)
# Definition des Object DirectorySearcher
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
# Definition des Suchbereichs
$objSearcher.SearchRoot = $objDomain
# Setzen des Filters
$objSearcher.Filter = $strFilter
# Scope der Abfrage
$objSearcher.SearchScope = "Subtree"
# Maximale PageSize
$objSearcher.PageSize = 100000
# Eigentschaften die abgefragt und übergeben werden sollen
$colProperties = "distinguishedname","displayname","samaccountname"
foreach ($i in $colProperties){$objSearcher.PropertiesToLoad.Add($i)|out-null}
# Starten der Abfrage
$colResults = $objSearcher.FindAll()
# Speichern der Ergebnisse in einen Array die auf die Filterkriterien gefunden wurden
$Results = @()
foreach ($objResult in $colResults){
 $objItem = $objResult.Properties; 
 $object = New-Object PSObject
 $object | Add-Member –MemberType NoteProperty -Name displayname -Value $objItem.displayname
 $object | Add-Member –MemberType NoteProperty -Name distinguishedname -Value $objItem.distinguishedname
 $object | Add-Member –MemberType NoteProperty -Name samaccountname -Value $objItem.samaccountname 

 $Results += $object
}

Natürlich bieten sich noch weiter aus mehr Möglichkeiten und Abfragemethoden innerhalb eines solche LDAP Queries. Dies soll Ihnen den Einstieg in den ADSI Searcher vereinfachen.