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:
Das gleiche gilt für die Ansicht des globalen Adressbuchs in Outlook:
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:
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 von ADSDisplayName.vbs |