• Startseite
  • PowerShell
  • So listen Sie Benutzer aus mehreren Organisationseinheiten mit PowerShell auf

So listen Sie Benutzer aus mehreren Organisationseinheiten mit PowerShell auf

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.

PowerShell

Verwenden des Befehls Get-ADUser, um AD-Benutzer aus mehreren OUs abzurufen:

  1. Wählen Sie die Domäne aus, für die Sie den Bericht erstellen möchten.
  2. Wählen Sie die LDAP-Filter aus, die Sie als Parameter für die Erstellung des Berichts verwenden möchten.
  3. Geben Sie im Parameter Properties zusätzliche Eigenschaften des Benutzerobjekts an, die im Bericht angezeigt werden sollen.
  4. Legen Sie das Format fest, in dem Sie den Bericht exportieren möchten.
  5. Überprüfen Sie noch einmal, ob Sie beim Schreiben des Skripts den richtigen Syntax verwendet haben.
  6. Verwenden Sie Windows PowerShell, um das Skript zu schreiben und auszuführen.
  7. Um den Bericht in einem anderen Format zu erstellen oder den Berichten zusätzliche Eigenschaften hinzuzufügen, ändern Sie das Skript entsprechend.
    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
ADManager Plus

Auflisten von AD-Benutzern aus mehreren OUs mit ADManager Plus:

  1. Navigieren Sie zu Berichte > Allgemeine Berichte > Alle Benutzer.
  2. Wählen Sie die gewünschte Domäne und OU aus, um Benutzer zu filtern.
  3. Klicken Sie auf Generieren.
  4. Nachdem der Bericht generiert wurde, klicken Sie auf Exportieren als, um ihn im HTML-, CSV-, XLS- oder PDF-Format herunterzuladen.

Anwendungsbeispiele und Skripte

Beispiel 1: Alle Benutzer aus mehreren bestimmten Organisationseinheiten abrufen

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.

Beispiel 2: Benutzer aus mehreren Organisationseinheiten in CSV exportieren

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.

Beispiel 3: Aktivierte Benutzer aus untergeordneten OUs abrufen

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.

Unterstützte Parameter

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

Einschränkungen bei der Verwendung von PowerShell zum Abrufen von AD-Benutzern

  • Komplexe Syntaxanforderungen: Selbst kleine Syntaxfehler oder Tippfehler können zu einem vollständigen Ausfall des Skripts führen, was Debugging-Zeit erfordert.
  • Eingeschränkte Fehlerbehandlung: Skripte scheitern still oder mit kryptischen Fehlern, wenn sie auf Sonderzeichen oder Berechtigungsprobleme stoßen.
  • Manuelle Schleifenkonstruktion: Das Abrufen von Benutzern aus mehreren OUs erfordert for-each-Schleifen und Array-Verwaltung.
  • Einschränkungen beim Exportformat: Das Ändern von Exportformaten erfordert Skriptänderungen und zusätzliche Cmdlets.
  • Komplexe Eigenschaftsauswahl: Das Hinzufügen oder Entfernen von Benutzerattributen erfordert die Bearbeitung und erneute Ausführung des Skripts.
  • Behandlung von Sonderzeichen: OU-Namen mit Sonderzeichen erfordern Escape-Sequenzen und eine sorgfältige Behandlung von Zeichenfolgen.
  • Keine visuelle Vorschau: Vor dem Export kann keine Vorschau der Ergebnisse angezeigt werden, ohne separate Befehle auszuführen.

Highlights der Verwendung von ADManager Plus zum Abrufen von AD-Benutzern

  • Skriptfreier Vorgang: Führen Sie alle Benutzerberichtsaufgaben über eine intuitive Weboberfläche aus, ohne Code schreiben zu müssen.
  • Über 200 vorgefertigte Berichte: Greifen Sie auf umfassende Benutzerberichte zu, die alle Aspekte der AD-Benutzerverwaltung abdecken.
  • Auswahl mehrerer OUs: Wählen Sie mehrere OUs mit einfachen Kontrollkästchen aus. Es sind keine Arrays oder Schleifen erforderlich.
  • Export mit einem Klick: Exportieren Sie Berichte sofort in den Formaten CSV, PDF, HTML und XLS, ohne zusätzliche Befehle ausführen zu müssen.
  • Benutzerdefinierter Berichtsgenerator: Erstellen Sie maßgeschneiderte Berichte mit Drag-and-Drop-Attributauswahl und visuellen Abfragegeneratoren.
  • Automatisierte Planung: Richten Sie mit dem integrierten Planer wiederkehrende Berichte mit E-Mail-Versand ein.
  • Echtzeit-Vorschau: Zeigen Sie die Berichtergebnisse vor dem Export mit einer Live-Datenvorschau an.

Rufen Sie mit ADManager Plus die Liste der AD-Benutzer aus mehreren OUs ab

Häufig gestellte Fragen

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:

  • Verwenden Sie OneLevel, wenn Sie nur Benutzer aus bestimmten Organisationseinheiten benötigen.
  • Verwenden Sie Subtree, wenn Sie alle Benutzer einschließlich derjenigen in untergeordneten Organisationseinheiten benötigen.
  • Wenn nichts angegeben ist, ist Subtree die Standardeinstellung.

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:

  • Große Ergebnismengen: Verwenden Sie spezifische Filter anstelle von -Filter *
  • Zu viele Eigenschaften: Fordern Sie mit -Properties nur die Eigenschaften an, die Sie benötigen
  • Netzwerklatenz: Fragt Domänencontroller ab, die näher an Ihrem Standort liegen
  • Ineffiziente Schleifen: Verwenden Sie Pipeline-Operationen anstelle von verschachtelten for-each-Schleifen
  • Keine Paginierung: Implementieren Sie bei großen Datensätzen eine Ergebnisbegrenzung mit -ResultSetSize

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:

  • DistinguishedName
  • Enabled
  • GivenName
  • Name
  • ObjectClass
  • ObjectGUID
  • SamAccountName
  • SID
  • Surname
  • UserPrincipalName

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:

  • Speicherverbrauch: Große Ergebnismengen verbrauchen viel RAM.
  • Ausführungszeit: Mehr OUs bedeuten eine längere Verarbeitungszeit.
  • Netzwerkbandbreite: Jede Abfrage erzeugt Netzwerkverkehr.
  • Auslastung des Domänencontrollers: Übermäßige Abfragen können die Leistung des DC beeinträchtigen.

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