Das Cmdlet Get-ADUser ist ein grundlegender PowerShell-Befehl zum Abrufen von Benutzerkontoinformationen aus Active Directory (AD). Unabhängig davon, ob Sie Benutzerkonten prüfen, Berichte erstellen oder Massenoperationen durchführen müssen, bietet Get-ADUser leistungsstarke Filter- und Suchfunktionen. Bei mehreren Organisationseinheiten (OUs) und komplexen Filteranforderungen kann der Vorgang jedoch zeitaufwändig sein und fortgeschrittene Skriptkenntnisse erfordern.
Verwenden des Befehls Get-ADUser, um AD-Benutzer aus mehreren OUs abzurufen:
Import-Module ActiveDirectory
$ous = 'OU=Sample1,DC=example1,DC=com','OU=Sample2,DC=example2,DC=com'
$ous | ForEach-Object {
Get-ADUser -Filter * -SearchBase $_ |
Select Name, DistinguishedName
} | Export-CSV -Path "C:\export.csv" -NoTypeInformation Auflisten von AD-Benutzern aus mehreren OUs mit ADManager Plus:
Rufen Sie alle Benutzerkonten aus den Organisationseinheiten „Vertrieb” und „Marketing” in Ihrer Domäne ab.
$ous = 'OU=Sales,DC=contoso,DC=com','OU=Marketing,DC=contoso,DC=com'
$ous | ForEach { Get-ADUser -Filter * -SearchBase $_ } Dieses Skript definiert mehrere Organisationseinheiten und ruft alle Benutzer aus jeder angegebenen Organisationseinheit ab.
Erstellen Sie eine CSV-Datei mit Benutzernamen und E-Mail-Adressen aus mehreren Abteilungen.
$ous = 'OU=IT,DC=contoso,DC=com','OU=HR,DC=contoso,DC=com','OU=Finance,DC=contoso,DC=com'
$ous | ForEach { Get-ADUser -Filter * -SearchBase $_ -Properties EmailAddress | Select Name,SamAccountName,EmailAddress } | Export-CSV "C:\Users\MultiOU_Report.csv" -NoTypeInformation Dadurch werden Benutzerdetails aus den OUs IT, HR und Finance in eine einzige CSV-Datei mit bestimmten Attributen exportiert.
Rufen Sie nur aktivierte Benutzerkonten einschließlich aller untergeordneten OUs innerhalb einer übergeordneten OU ab.
Dies fragt alle aktivierten Benutzer innerhalb der Unternehmens-OU und aller untergeordneten OUs ab, einschließlich Informationen zu Abteilung und Titel. This queries all enabled users within the corporate OU and all its child OUs, including department and title information.
| Parameter | Beschreibung |
|---|---|
| -Identity | Gibt ein AD-Benutzerobjekt anhand des Distinguished Name, der GUID, der Sicherheitskennung oder des SAM-Kontonamens an. |
| -Filter | Gibt eine Zeichenfolge für die Abfrage mithilfe der PowerShell-Ausdruckssprache an, um mehrere Objekte abzurufen. |
| -SearchBase | Gibt den AD-Pfad an, unter dem gesucht werden soll (OU oder Distinguished Name (DN) des Containers). |
| -SearchScope | Gibt den Umfang der AD-Suche an (Basis, OneLevel oder Subtree) |
| -Properties | Gibt an, welche Benutzereigenschaften abgerufen werden sollen (standardmäßig wird eine begrenzte Menge zurückgegeben) |
| -LDAPFilter | Gibt einen LDAP-Abfrage-String zum Filtern von Benutzern an |
Um Benutzer aus mehreren Organisationseinheiten abzurufen, erstellen Sie ein Array mit den eindeutigen Namen der Organisationseinheiten und verwenden Sie ForEach-Object, um sie mit Get-ADUser zu durchlaufen:
$ous = @('OU=Sales,DC=domain,DC=com','OU=HR,DC=domain,DC=com')
$ous | ForEach-Object { Get-ADUser -Filter * -SearchBase $_ } Mit diesem Ansatz können Sie mehrere Organisationseinheiten in einer einzigen Skriptausführung abfragen.
OneLevel durchsucht nur die direkten Untereinheiten der angegebenen Organisationseinheit, ohne Unterorganisationseinheiten. Subtree durchsucht die gesamte Hierarchie einschließlich aller verschachtelten Organisationseinheiten. Für Szenarien mit mehreren Organisationseinheiten:
Fügen Sie den Parameter -Properties hinzu, um zusätzliche Attribute abzurufen, und leiten Sie die Ergebnisse dann über Export-CSV weiter:
$ous = @('OU=IT,DC=contoso,DC=com','OU=Finance,DC=contoso,DC=com')
$users = foreach ($ou in $ous) {
Get-ADUser -Filter * -SearchBase $ou -Properties EmailAddress, Department, Title |
Select Name, SamAccountName, EmailAddress, Department, Title
}
$users | Export-CSV "C:\Reports\MultiOU_Users.csv" -NoTypeInformation Häufige Leistungsprobleme und Lösungen:
Kombinieren Sie die OU-Iteration mit Filterbedingungen. Um beispielsweise nur aktivierte Benutzer mit E-Mail-Adressen zu erhalten:
$ous = @('OU=Sales,DC=domain,DC=com','OU=Marketing,DC=domain,DC=com')
$ous | ForEach-Object {
Get-ADUser -Filter {Enabled -eq $true -and EmailAddress -like "*"} -SearchBase $_
} Ja, geben Sie den Parameter -Server für jede Domäne an:
$ouList = @(
@{OU='OU=Users,DC=domain1,DC=com'; Server='dc1.domain1.com'},
@{OU='OU=Users,DC=domain2,DC=com'; Server='dc2.domain2.com'}
)
foreach ($item in $ouList) {
Get-ADUser -Filter * -SearchBase $item.OU -Server $item.Server
} Get-ADUser gibt standardmäßig folgende Eigenschaften zurück:
Um zusätzliche Eigenschaften wie EmailAddress, Department oder Manager abzurufen, verwenden Sie den Parameter -Properties.
OUs mit Sonderzeichen erfordern eine ordnungsgemäße Escape-Kodierung. Verwenden Sie für OUs, die Kommas enthalten, einen Backslash („\“).
Wenn der OU-Name „Sales, North America” lautet:
$ou = 'OU=Sales\, North America,DC=contoso,DC=com'
Get-ADUser -Filter * -SearchBase $ou Verwenden Sie für Klammern oder andere Sonderzeichen einfache Anführungszeichen und maskieren Sie diese nach Bedarf.
Es gibt keine feste Begrenzung für die Anzahl der OUs, die Sie abfragen können, aber beachten Sie Folgendes:
Für eine optimale Leistung sollten Sie große Abfragen stapeln oder eine Paginierung implementieren, wenn Sie mit mehr als 50 OUs arbeiten.
So erstellen Sie einen zusammenfassenden Bericht mit der Anzahl der Benutzer pro Organisationseinheit:
$ous = @('OU=Sales,DC=domain,DC=com','OU=IT,DC=domain,DC=com')
$report = foreach ($ou in $ous) {
$users = Get-ADUser -Filter * -SearchBase $ou -SearchScope OneLevel
[PSCustomObject]@{
OU = $ou
UserCount = $users.Count
}
}
$report | Format-Table -AutoSize