Nachdem in einer Domaine die User einmal angelegt sind, wäre es manuell sehr aufwendig den DisplayNamen und CanonicalName zu ändern. Dies ist jedoch manchmal notwendig, wenn zum Beispiel die User mit Nachname, Vorname angelegt wurden und nun entweder das Komma entfernt werden soll oder die Namen in der Reihenfolge vertauscht werden müssen.
Damit man die nicht händisch mache muss, hab ich ein vbs-file erstellt, dass dies automatisch macht. Der Aufbau ist relativ einfach gehalten. in der 3. Zeile wird der Pfad zu den umzubenennenden Usern eingetragen. Das Script durchläuft dann die OU und kontrolliert alle User-Objekte auf das vorkommen eines Kommas im DisplayNamen. Wenn eines vorhanden ist, wird der Name gesplittet (hier ist noch eine Unterscheidung zwischen einem User mit Vor- & Zuname, und einem User der noch einen zweiten Vornamen besitzt) das Komma entfernt und der CN auf Nachname Vorname und der DisplayName auf Vorname Nachname gesetzt.
Des Verständnissheitshalber sind einige Counter eingebaut, damit der Admin am Ende des scriptes eine Übersicht über die Änderungen erhält.
Am Ende des scriptes stehen noch vier ldif Befehle, mit denen man die Objekte eines ADs exportieren und wieder importieren kann. Evtl. möchte man ja einmal alle Benutzerobjekte in einer Testdomain bearbeiten um zu sehen wie das Ergebniss aussieht.
Auzurufen ist das über cscript rename_ad_user.vbs
Einige Userobjekte lassen sich evt. nicht direkt beim ersten mal ändern. Wie im Screenshot zu sehen ist, konnten 3 User nicht verändert werden. Einfach das script nochmal starten, dann werden die fehlenden noch nachgezogen.
on error resume nextstr_ParentDN = "OU=test,DC=nwtraders,DC=msft" Set oTargetOU = GetObject("LDAP://" & str_ParentDN) oTargetOU.Filter = Array("user") str_errcount = 0 str_errcount = 0 str_obj_count = 0 str_edit_count = 0For each usr in oTargetOU if instr(usr.SamAccountName, "$") = 0 then if instr(usr.displayName, ",") <> 0 thenstr_FullName = usr.get("displayName") str_FullName = Replace(str_FullName,",","") ary_FullName = split(str_FullName) str_CN = usr.get("cn") CountWords = UBound(ary_FullName) - LBound(ary_FullName) +1if CountWords = 2 then str_Last = ary_FullName(0) str_First = ary_FullName(1) str_FullName = str_First + " " + str_Last str_Fullname_CN= str_Last + " " + str_First end ifif CountWords = 3 then str_First = ary_FullName(1) str_Middle = ary_FullName(2) str_Last = ary_FullName(0) str_Fullname = str_First + " " + str_Middle + " " + str_Last str_Fullname_CN= str_Last + " " + str_First + " " + str_Middle end ifusr.put "displayName", str_FullName usr.setinfo ' wscript.echo "LDAP://cn=" & """" & str_CN & """" & "," & str_ParentDN, "cn=" & """" & str_FullName_CN & """" oTargetOU.MoveHere "LDAP://cn=" & """" & str_CN & """" & "," & str_ParentDN, "cn=" & """" & str_FullName_CN & """" str_edit_count = str_edit_count + 1 usr.setinfo end ifend if ' wscript.sleep 250str_obj_count = str_obj_count + 1if err.number <> 0 then wscript.echo "Bei der Bearbeitung folgendes Eintrages trat ein Fehler auf: " & str_CN str_errcount = str_errcount + 1 Err.Clear end ifNext wscript.echo "Skript beendet." & chr(13) & "Es wurden " & str_obj_count & " Objekte kontrolliert und " & str_edit_count & " bearbeitet. Dabei traten " & str_errcount & " Fehler auf."'Export der OUs 'ldifde -f exportOu.ldf -s server -d "DC=nwtraders,DC=msft" -p subtree -r "(objectCategory=organizationalUnit)" -l "cn,objectclass,ou"' Export der User 'ldifde -f Exportuser.ldf -s server -d "DC=nwtraders,DC=msft" -p subtree-r "(&(objectCategory=person)(objectClass=User)(givenname=*))" -l "cn,givenNamesn,DisplayName,objectclass,samAccountName"'Import der OUs 'ldifde -i -f ExportOU.ldf -s server'Import der User 'ldifde -i -f Exportuser.ldf -s server