Im Verwaltungsprogramm „Active Directory-Benutzer und -Computer“ (ADUC) gibt es keine Möglichkeit, den LDAP-Pfad zu vorhandenen Objekten anzuzeigen. In vielen Fällen wird diese Angabe allerdings benötigt, z.B. beim Scripting oder bei einem Authoritative Restore.
Ein LDAP-Pfad (auch „Distinguished Name“ oder „DN“) beschreibt eindeutig die Position eines Objekts in der Verzeichnishierarchie. Nehmen wir als Beispiel Olga Hurzka, die in der Marketingabteilung der Firma Beispiel AG arbeitet. Ihr Benutzerobjekt hat den LDAP-Pfad „CN=Olga Hurzka, OU=Marketing, DC=beispiel-ag, DC=de“. Active Directory kennt als Erweiterung des DN auch den „AdsPath“, wo vor dem DN noch das Präfix „LDAP://“ steht.
Groß- und Kleinschreibung sind dabei irrelevant, wichtig sind aber die Kürzel: CN steht für „Common Name“ und bezeichnet den allgemeinen Objektnamen innerhalb des jeweiligen Ordners. OU ist bei Microsoft die „Organizational Unit“, also der ADS-Ordner. DC ist die Domain Component (und nicht etwa der Domänencontroller), wohinter sich jeweils ein Abschnitt des DNS-Namens verbirgt, den die Domäne trägt.
Mit Windows-Bordmitteln kann man diesen Pfad leider nicht anzeigen. Ein Workaround ist das folgende Vorgehen:
- Einschalten der Erweiterten Ansicht (Ansicht/ Erweiterte Funktionen)
- Aufrufen des Eigenschaften-Fensters für das gesuchte Objekt per Doppelklick
- Auf der Registerkarte „Objekt“ findet sich nun der „Kanonische Name“ des Objekts. Dies ist nicht der LDAP-Pfad, sondern eine Notation, die einem Dateipfad ähnelt. Es lässt sich aber der LDAP-Pfad daraus ableiten (in umgekehrter Reihenfolge lesen und an den passenden Stellen „DC“, „OU“ und „CN“ einfügen)
Mit einer skriptbasierten Lösung und einer Erweiterung der AD-Konfiguration lässt sich aber auch der tatsächliche LDAP-Pfad direkt aus dem Kontextmenü im Verwaltungsprogramm anzeigen. So geht’s:
AD-Konfiguration erweitern
Mit einem VB-Skript wird in die AD-Konfiguration für die wichtigen Objektklassen ein zusätzlicher Kontextmenü-Eintrag aufgenommen. Dieser verweist auf ein zweites VB-Skript, welches danach auf die jeweilige Admin-Workstation kopiert wird. Die Konfiguration muss nur einmalig geändert werden.
Hier das Skript. Es erweitert das Kontextmenü für eine Reihe von Objeltklassen; leider lässt sich der neue Befehl aber nur bei Benutzern, Kontakten, Ordnern (nicht OUs) und Druckern nutzen (warum, weiß ich noch nicht).
- On Error Resume Next
- Set root= GetObject(„LDAP://rootDSE“)
- If (Err.Number <> 0) Then
- BailOnFailure Err.Number, „on GetObject method“
- End If
- sConfig = root.Get(„configurationNamingContext“)
- ‚hardcoded for German
- sLocale = „407“
- ‚ bei einigen Objektklassen wird der neue Eintrag
- ‚ im ADUC leider nicht angezeigt!
- arrClass = Array(„user“,„contact“,„group“,„organizationalUnit“, _
- „container“,„printQueue“,„computer“,„volume“)
- For i=LBound(arrClass) To UBound(arrClass)
- sPath = „LDAP://cn=“ & arrClass(i) & „-Display,cn=“ & sLocale & „,cn=DisplaySpecifiers,“ & sConfig
- show_items „Display Specifier: „ & sPath
- Set obj= GetObject(sPath)
- If (Err.Number <> 0) Then
- BailOnFailure Err.Number, „on GetObject method“
- End If
- ‚TODO–check if this is already there.
- ‚Add the value for the context menu
- sValue = „6,LDAP-Pfad,ADUC_ADSPath_zeigen.vbs“
- vValue = Array(sValue)
- obj.PutEx 3, „adminContextMenu“, vValue
- If (Err.Number <> 0) Then
- BailOnFailure Err.Number, „on IADs::PutEx method“
- End If
- ‚ Commit the change.
- obj.SetInfo
- If (Err.Number <> 0) Then
- BailOnFailure Err.Number, „on IADs::SetInfo method“
- End If
- show_items „Kontextmenüeintrag hinzugefügt: „ & sValue
- Next
- “““““““““““““““““““‘
- ‚ Display subroutines
- “““““““““““““““““““‘
- Sub show_items(strText)
- WScript.Echo strText, vbInformation, „Add admin context menu“
- End Sub
- Sub BailOnFailure(ErrNum, ErrText) strText = „Error 0x“ & Hex(ErrNum) & “ „ & ErrText
- WScript.Echo strText, vbInformation, „ADSI Error“
- WScript.Quit
- End Sub
Skript auf der Admin-Workstation
Folgendes Skript muss auf der Admin-Workstation im Suchpfad vorhanden sein. Am einfachsten kopiert man es in den Windows-Ordner. Es trägt den Namen „ADUC_ADSPath_zeigen.vbs“.
- Set objArgs = WScript.Arguments
- If objArgs.Count <> 2 Then
- WScript.Echo „Dieses Skript kann nur aus dem Kontextmenü „ _
- & „von Active Directory-User und -Computer aufgerufen „ _
- & „werden!“
- WScript.Quit
- End If
- stradspath = objArgs(0)
- Set objADS = GetObject(stradspath)
- strDN = objADS.distinguishedName
- InputBox „LDAP-Pfad:“, „LDAP-Pfad“, strDN
Zur Nutzung: Wenn die Vorbereitungen abgeschlossen sind, klickt man rechts auf ein Objekt (Benutzer, Computer, Ordner oder Drucker) und wählt „LDAP-Pfad“. Der Pfad wird dann angezeigt und kann direkt in die Zwischenablage kopiert werden.
http://faq-o-matic.net/?p=587