Printout Header

HowTo:


Nachträgliches Ändern des Anzeigenamens bei ADS Benutzer und Kontakten in die Form  „Nachname, Vorname“


Eine ziemlich nervige Grundeinstellung der Active Directory Benutzerverwaltung ist die Angewohnheit, Benutzer und Kontakte in der Form „Vorname Nachname“ zu erstellen. So ist es in der Standard-Ansicht von ADS Benutzer und Computer“ etwas mühsam, die Übersicht zu behalten, da die Benutzer alle nach Ihrem Vornamen einsortiert werden:


ADS Objektnamen Screenshot

Das gleiche gilt für die Ansicht des globalen Adressbuchs in Outlook:


Adressbuch Screenshot

Noch schlimmer wäre es, wenn ein Teil der Objekte in der Form „Nachname, Vorname“ und ein anderer Teil mit „Vorname Nachname“ angezeigt würde...

Hier lässt sich Abhilfe schaffen. Bei Neuerstellungen können Sie dafür sorgen, dass die Objekt- und Anzeigenamen sofort in der gewünschten Form „Nachname, Vorname“ erstellt werden. Mehr dazu finden Sie hier.

Für bestehende Objekte kann man eine Änderung per VBScript durchführen. Das erforderliche Skript müsste folgendes leisten:

1. Suche alle User und Kontakte unterhalb eines angegebenen Domänen- oder OU-Pfades.
2. Von diesen Usern diejenigen nehmen, die sowohl Vor- als auch Nachnamen als Eigenschaft besitzen.
3. Der neue Name wird dann aus „Nachname, Vorname“ gebildet.
4. Der DisplayName des Objekts wird neu gesetzt.
5. Das Objekt wird entsprechend umbenannt (das funktioniert in VBScript mit der Container-Funktion
    MoveHere).

Und so könnte ein entsprechendes Skript aussehen:


strBase = “<ein LDAP-Pfadname, z.B. ou=test,dc=firma,dc=de>;”

strFilter = "(&(|(objectclass=user)(objectclass=contact))(&(sn=*)(givenName=*)));"
strAttrs = "ADSPath;"
strScope = "Subtree"

set con = CreateObject("ADODB.Connection")
con.Provider = "ADsDSOObject"
con.Open
set list = con.Execute(strBase & strFilter & strAttrs & strScope)

While Not list.Eof
     set obj = GetObject(list.Fields(0).Value)

     strLast = obj.sn
     strFirst = obj.givenName
     strFullname = strLast & ", " & strFirst
     strObjDN = obj.distinguishedName
     strContainer = right(strObjDN, len(strObjDN) - len(obj.name) - 1)
     strNewObjDN = Replace("cn=" & strFullName, ",", "\,")

     obj.Put "displayName" , strFullName
     obj.Setinfo

     set container = GetObject("LDAP://" & strContainer)
     container.MoveHere "LDAP://" & strObjDN, strNewObjDN
 
     list.MoveNext
Wend

Mehr Informationen über die hier angewendete Filter-Suche im Active Directory finden sie im SelfADSI-Tutorial.


Ich habe ein etwas komplexeres Skript geschrieben, dass den ADS-Container als Parameter ausliest und die entsprechenden Informationen ausgibt. Der Aufruf lautet:

cscript ADSDisplayName.vbs <ADS-Container-Pfad>

Hierbei ist der ADS-Container die Domäne oder OU, in der die Namen geändert werden sollen. Es muss eine LDAP-Pfadangabe erfolgen, z.B. "dc=firma,dc=de" oder "ou=marketing,dc=firma,dc=de".


Download Script Download von ADSDisplayName.vbs