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

AD-Objektzählung mit adfind.exe

von veröffentlicht am7. Mai 2020, 06:07 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Active Directory, AD: Erweiterte Abfragen, Batch, Dokumentation, Downloads   Translate with Google Translate Translate EN   Die angezeigte Seite drucken

Seit vielen Jahren ist adfind.exe von Joe Richards das leistungsfähige Standardwerkezug, um Daten aus Active Directory zu finden, zu lesen und auszuwerten. In diesem Artikel stelle ich eine Möglichkeit vor, auch in großen AD-Umgebungen schnell einen Überblick über die Objektzahlen in der Struktur zu erhalten. Da viele Admins immer noch mit herkömmlichen Batch-Skripten besser klarkommen – und die PowerShell an dieser Stelle auch keine großen Vorteile brächte – kommt die Lösung “herkömmlich” daher. Wer möchte, kann dasselbe Prinzip aber natürlich mit der PowerShell nachbilden.

Die Idee

Es geht in der Lösung, die ich hier vorstelle, um eine ganz bestimmte Aufgabe. Sie beantwortet die Frage: In welchen OUs befinden sich wie viele Benutzer-, Computer- und Gruppen-Objekte? Mehr nicht. Da ich viele Analysen und IT-Migrationsprojekte begleite, brauche ich aber oft eine Antwort auf diese Frage.

Meine Lösung verbindet zwei vorhandene Tools, die beide sehr schnell arbeiten: csvde.exe (ist seit Windows 2000 Teil des Betriebssystems und wird mit den Admintools für Active Directory installiert) gibt die Liste aller OUs aus, die wir im zweiten Schritt brauchen. adfind.exe übernimmt dann die eigentliche Zählung. (Wer will, kann natürlich für beide Aufgaben adfind.exe einspannen, das unterscheidet sich vermutlich nur unwesentlich. Den OU-Export per csvde.exe tippe ich aber quasi blind in die Konsole und habe ihn daher einfach genommen.)

Die Lösung verzichtet auf Dynamik, sondern arbeitet mit einem Hilfsskript, das einfach für jede einzelne OU einmal die Zählung mit Hilfe einer Batchdatei ausführt und das Ergebnis in eine Datei schreibt. Das reicht für mich völlig aus, weil ich Zählungen dieser Art nur als Momentaufnahme brauche. Dafür habe ich keine Programmschleifen, die fehlschlagen oder Unerwartetes ausgeben könnten.

Schritt 1: OU-Export

Zuerst also brauche ich eine Liste aller OUs in LDAP-Notation. Die erzeuge ich mir mit csvde.exe in der Kommandozeile, wie gesagt. Dazu nutze ich ein Kommando wie folgendes – das Feld “name” gebe ich nur deshalb aus, weil csvde.exe ohne Angabe eines Feldnamens viel zu viele Daten zurückgibt. Der Schalter -d gibt die Start-OU an; wer die ganze Domäne ausgeben möchte, kann den Schalter auch ganz weglassen.

csvde.exe -u -f "Meine-OUs.txt" -r "(objectClass=organizationalUnit)" -d "OU=Standard-Benutzer,DC=domain,DC=tld" -l name

Schritt 2: Zählskript

Naja, eigentlich nicht Schritt 2, aber nennen wir’s mal so: Das Skript, das die eigentliche Zählung durchführt.

@ECHO OFF
IF !%1!==!! (
	SET DN="OU=Standard-Benutzer,DC=domain,DC=tld"
	) ELSE (
	SET DN=%1
	)
SET ADir=E:\Daten\ADCount
	
for /f "Tokens=1 Delims= " %%i in ('%ADir%\AdFind.exe -s One -list -sc adobjcnt:user -b %DN%') do set Users=%%i
for /f "Tokens=1 Delims= " %%i in ('%ADir%\AdFind.exe -s One -list -sc adobjcnt:computer -b %DN%') do set Computers=%%i
for /f "Tokens=1 Delims= " %%i in ('%ADir%\AdFind.exe -s One -list -sc adobjcnt:group -b %DN%') do set Groups=%%i

ECHO %DN%,%Users%,%computers%,%Groups%

Schritt 3: Das Hilfsskript mit Excel erzeugen

Nun kommt kurz Excel zum Einsatz. Die Methode dafür habe ich hier beschrieben, ich arbeite viel auf diese Weise:

[Excel: Admins unbekannter Liebling | faq-o-matic.net]
https://www.faq-o-matic.net/2008/01/19/excel-admins-unbekannter-liebling/

Ich öffne die Datei “Meine-OUs.txt” mit Excel und füge in der dritten Spalte ein Kommando dieser Art ein:

="CALL Get-OUCount.bat """ & A1 & """ >> OU-Object-Count.txt"

Man beachte dabei die drei (!) Anführungszeichen. Damit weise ich Excel an, dass es jeweils um den Namen der OU Anführungsstriche setzt, die wir vielleicht in den Kommandos brauchen.

Das Kommando in der dritten Spalte (also in Zelle C1) kopiere ich dann für alle Zeilen nach unten, sodass es einen CALL-Befehl pro OU gibt. Den Inhalt der Spalte C markiere ich dann und kopiere ihn in die Zwischenablage.

Nun öffne ich einen Texteditor und gebe in eine neue Textdatei ein:

@ECHO OFF
ECHO DN,Users,Computers,Groups > OU-Object-Count.txt

Darunter füge ich den Inhalt der Zwischenablage ein. Die so erzeugte Datei speichere ich als “Count-Objects.bat”. Diese Batchdatei ruft also für jede einzelne OU einmal das Zählskript auf und hängt das Ergebnis an die Datei “OU-Object-Count.txt” an.

Schritt 4: Ausführen

Das war es im Wesentlichen. Die Hilfs-Batchdatei “Count-Objects.bat” führe ich nun aus. Sie zählt mit adfind.exe die Objekte und sammelt die Ergebnisse in der Datei “OU-Object-Count.txt”. Das geht auch in großen Umgebungen erstaunlich schnell.

Hier der Download des Zähl-Skripts:

Download: Get-OUCount  Get-OUCount (379 bytes, 559-mal heruntergeladen, letzte Änderung am 1. Januar 2000)

© 2005-2023 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!