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

Wie kann ich meine Benutzer als "Nachname, Vorname" anzeigen?

von veröffentlicht am10. August 2003, 15:48 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Active Directory, AD: Daten bearbeiten, Scripting   Translate with Google Translate Translate EN   Die angezeigte Seite drucken
Zuletzt aktualisiert: 26. September 2013

In der Standardeinstellung werden in Active Directory die Namen von Benutzerkonten (und anderen Objekten, z. B. Kontakten) in der Form „Vorname Nachname“ („Nils Kaczenski“) generiert. Das ist unpraktisch bei der Listenansicht in den Standard-Verwaltungstools und im Outlook-Adressbuch, denn man kann nicht nach dem Nachnamen sortieren. Leider gibt es keine Möglichkeit, die Sortierung „mal eben“ zu ändern. Stattdessen müssen die Benutzerkonten umbenannt werden. Wichtig sind hier meist gleich zwei Attribute: „name“ und „displayName“. Dabei ist allerdings nur „name“ für die Standard-Listenansicht zuständig (und nicht etwa „displayName“, wie der Name suggeriert).

Das Problem muss an zwei Stellen behoben werden: Einmal für die vorhandenen Objekte und einmal für alle neuen Objekte.

1. Vorhandene Objekte 

Das erste Skript liest es alle Benutzerkonten einer bestimmten OU aus und ändert sowohl das „name“- als auch das „displayName“-Attribut. Gleichzeitig generiert es eine Logdatei über alle Änderungen. Das Skript ist eine Verbesserung des Beispiels aus dem Knowledge-Base-Artikel 277717. Durch das Logging geht es auch weiter als das Script von Robert Pieroth (http://www.rpieroth.de/ChangeRDN.VBS).

  1. ‚ ““““““““““““““““““““““
  2. ‚ ADNameÄndern.vbs
  3. ‚ Verbesserung des Microsoft-Scripts aus
  4. ‚ KB-Q277717
  5. ‚ Ändert den Namen (name, displayName)
  6. ‚ von Benutzerkonten einer anzugebenden OU
  7. ‚ ins Format „Nachname, Vorname“
  8. ‚ Von Nils Kaczenski (Vorname at Nachname .de), 2002
  9. ‚ Keine Gewähr! Nutzung auf eigene Gefahr!
  10. ‚ ““““““““““““““““““““““
  11.  
  12. ‚ Verbindung zur Domäne
  13. set objRoot = GetObject(„LDAP://rootDSE“)
  14. strDomain = objRoot.Get(„DefaultNamingContext“)
  15.  
  16. ‚ Logdatei anlegen
  17. strScriptPfad = WScript.ScriptFullName
  18. strLogPfad = left(strScriptPfad, InstrRev(strScriptPfad, „\“))
  19.  
  20. set objFSO = CreateObject(„Scripting.FileSystemObject“)
  21. with objFSO
  22.     dateiPfad = .BuildPath(strLogPfad, „ADNames“)
  23.     if not .FolderExists(dateiPfad) then .CreateFolder(dateiPfad)
  24.     dateiName = „ADNames“ & CStr(Now) & „.log“
  25.     dateiName = replace(dateiName, „:“, „-„)
  26.     pfadName = .BuildPath(dateiPfad, dateiName)
  27.     set objDatei = .CreateTextFile(pfadName)
  28. end with
  29. SchreibLog Now
  30. SchreibLog „Skript gestartet“ & vbCrLf
  31.  
  32.  
  33. ‚ Benutzer fragen …
  34. strOU = InputBox(„Welcher Container soll bearbeitet werden?“ & vbCrLf _
  35. & „(LDAP-Angabe ohne Domäne)“,, „CN=Users“)
  36.  
  37. ‚ Verbindungsstring
  38. strObjOU = „LDAP://“ & strOU & „,“ & strDomain
  39.  
  40. ‚ OU ansprechen
  41. set objOU = GetObject(strObjOU)
  42.  
  43. ‚ Log-Zähler initialisieren
  44. intErfolg = 0
  45. intFehler = 0
  46.  
  47. ‚ ADSI-Fehlermeldungen verfügbar?
  48. on error resume next
  49. set ADError = nothing
  50. set ADError = CreateObject(„ADsError“)
  51. on error goto 0
  52. if ADError is nothing then
  53.    ADSIError = false
  54. else
  55.    ADSIError = true
  56. end if
  57. set ADError = nothing
  58.  
  59.  
  60. objOU.Filter = Array(„user“)
  61.  
  62. on error resume next ‚Fehler selbst abfangen
  63.  
  64. For each usr in objOU
  65.  
  66.     if instr(usr.SamAccountName, „$“) = 0 then
  67.                 strName = usr.get(„name“)
  68.                 schreibLog „Benutzer: „ & usr.SamAccountName
  69.         vLast = usr.get(„Sn“)
  70.         vFirst = usr.get(„GivenName“)
  71.        vFullname = vLast + „, „ + vFirst ‚ für den displayName
  72.        vCN = vLast + „\, „ + vFirst ‚ für name (= cn): Komma maskieren
  73.  
  74.                 ‚ displayName setzen: das geht mit „Put“
  75.             usr.put „displayName“, vFullName
  76.            usr.setinfo
  77.  
  78.                 ‚ name/cn setzen: erfordert Umbenennen durch die „MoveHere“-Methode!
  79.                 strRenameCN = „LDAP://cn=“ & strName & „,“ & strOU & „,“ & strDomain
  80.                 set objUsrRename = objOU.MoveHere(strRenameCN, „cn=“ & vCN)
  81.  
  82.                 ‚ Logging: Fehler kontrollieren
  83.                 if err.number <> 0 then
  84.                     if ADSIerror then
  85.                       Set objError = CreateObject(„ADsError“)
  86.                       strKlartext = objError.GetErrorMessage(Err.number)
  87.                     end if
  88.                     SchreibLog „Fehler: „ & strKlartext & “ „ & err.number & „, „ & err.description
  89.                     intFehler = intFehler + 1
  90.                     err.Clear
  91.                     if ADSIerror then set objError = nothing
  92.                 else
  93.                     SchreibLog „Erfolg“
  94.                     intErfolg = intErfolg + 1
  95.                 end if
  96.                 SchreibLog vbCrLf
  97.         end if
  98.  
  99. Next
  100.  
  101. on error goto 0 ‚Fehlerbehandlung wieder an
  102.  
  103. ‚ Erfolgsmeldung ausgeben
  104. saylog intErfolg & “ Benutzer bearbeitet, „ & intFehler & “ Fehler aufgetreten.“ & vbCrLf
  105. schreibLog Now
  106. schreibLog „Skript beendet“
  107. objDatei.Close
  108.  
  109.  
  110. sub SchreibLog(strText)
  111.     ‚ Funktion: schreibt angegebenen Text in die Logdatei
  112.     ‚ Eingabeparameter:
  113.     ‚ Kommentar:
  114.  
  115.     objDatei.WriteLine strText
  116.  
  117. end sub
  118.  
  119.  
  120. sub saylog(strText)
  121.  
  122.     msgBox strText
  123.     SchreibLog strText
  124.  
  125. end sub

2. Die Voreinstellung für neue Objekte ändern

Mit Hilfe dieses Skripts wird die Voreinstellung des AD geändert, sodass neue Objekte nach dem Prinzip „Nachname, Vorname“ benannt werden.

  1. ‚ “““““““““““““““““““““““““““‘
  2. ‚ UserDisplayConfig.vbs
  3. ‚ Ändert die Methode zum Generieren des „name“-Attributs
  4. ‚ im Active Directory, sodass der Name als
  5. ‚ „Nachname, Vorname“ generiert wird.
  6. ‚ Benutzung auf eigene Gefahr!
  7. ‚ Von Nils Kaczenski (Vorname at Nachname .de)
  8. ‚ “““““““““““““““““““““““““““‘
  9.  
  10. set rootDSE = GetObject(„LDAP://RootDSE“)
  11. domainname=rootDSE.Get(„configurationnamingcontext“)
  12.  
  13. ‚ CN=407 steht für Deutsch. US-Englisch: 409
  14. ‚ statt „user-display“ kann auch „contact-display“ angegeben werden (Kontakte)
  15. strConnect = „LDAP://cn=user-Display,CN=407,CN=DisplaySpecifiers,“ & domainname
  16.  
  17. set objDomConf = GetObject(strConnect)
  18.  
  19. ‚ <sn>: Nachname, <givenName>: Vorname
  20. objDomConf.Put „createDialog“, „%<sn>\, %<givenName>“
  21. objDomConf.SetInfo
  22.  
  23. msgBox „Erfolg!“

 

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