Logo faq-o-matic.net
Logo faq-o-matic.net

AD auswerten: OU-Struktur mit Objektzahlen

von veröffentlicht am13. Mai 2025, 06:47 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: AD: Erweiterte Abfragen, Dokumentation, PowerShell   Translate with Google Translate Translate EN   Die angezeigte Seite drucken

Wer sich schnell einen Überblick über die Objektstruktur einer Active-Directory-Umgebung verschaffen möchte, kommt oft sehr weit mit der Information, in welchen OUs wie viele Objekte liegen. Diese Daten lassen sich mit der PowerShell recht schnell zusammentragen.

Das folgende Skript liest die OU-Struktur der Domäne aus und bringt sie in eine sortierbare und übersichtliche Form. Für jede OU zählt es dann, wie viele User-, Computer- und Gruppenobjekte sich dort befinden. Öffnet man das Ergebnis dann in Excel (oder einem vergleichbaren Programm), dann lässt es sich gut auswerten:

  • Die OU-Liste ist alphabetisch geordnet nach der Spalte “canonicalName”, was die Anordnung der OUs logisch korrekt abbildet
  • Die Spalte “Depth” gibt die OU-Ebene an, also die Verschachtelungstiefe
  • Die Spalte “Structure” stellt den Namen der OU eingerückt dar, indem es eine Reihe Leerzeichen je nach Verschachtelungstiefe voranstellt. Das ist simpel, aber ausreichend, um die Hierarchie auch optisch zu erkennen.
  • Die letzten drei Spalten geben an, wie viele “Users”, “Groups” und “Computers” es in der jeweiligen OU gibt.

image

Hier das Skript. Es ist recht kurz, daher einfach in einen Editor kopieren und ausführen.

'distinguishedName;name;canonicalName;Depth;Structure;Users;Groups;Computers' | Out-File OU-Objects.txt
$OUs = Get-ADOrganizationalUnit -Filter * -Properties canonicalName | Sort-Object -Property canonicalName
foreach ($OU in $OUs) {
    $DN = $OU.distinguishedName
    $Name = $OU.name
    $Path = $OU.canonicalName
    $Depth = @([regex]::Matches($Path, "/")).count
    $Structure = ('   ' * ($Depth-1)) + $Name
    $Users = @(Get-ADUser -SearchBase "$DN" -SearchScope OneLevel -Filter *).count
    $Groups = @(Get-ADGroup -SearchBase "$DN" -SearchScope OneLevel -Filter *).count
    $Computers  = @(Get-ADComputer -SearchBase "$DN" -SearchScope OneLevel -Filter *).count
    "$DN;$Name;$Path;$Depth;$Structure;$Users;$Groups;$Computers" | Out-File OU-Objects.txt -Append
}

Hinweis: Das Skript erzeugt in großen Umgebungen u.U. eine hohe oder unerwartete Abfragelast: Es stellt pro OU drei recht umfassende Abfragen an Active Directory. Es kann daher sein, dass ein SIEM oder Monitoring-System verdächtige Aktivitäten meldet. Das Skript sollte in solchen Umgebungen nur in Abstimmung mit der Security-Administration ausgeführt werden. Gedacht ist es vor allem für überschaubare Domänen.

© 2005-2025 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!