Jump to content

Ändern des CNAME der Benutzer per Script im AD


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

ich habe erfolgreich per Script den Anzeigenamen (DisplayName) aller Benutzer in einer bestimmten OU im AD geändert. Vor dem Ändern wurden die Namen wie folgt angezeigt:

Vorname Nachname

Nun werden sie wie folgt angezeigt:

Nachname, Vorname

 

Beim öffnen des SnapIns Active Directory Benutzer und Computer werden die Benutzer allerdings immernoch in der Schreibweise Vorname Nachname angezeigt. Dies liegt daran, dass hier nicht der Anzeigename ausgegeben wird, sondern der CNAME (CN) des Objekts aus LDAP. Beipiel für den Benutzer "Max Muster" in der OU "Vertrieb":

cn=Max Muster;ou=Vertrieb;dc=meinedomäne;dc=local

Den (CN) möchte ich nun auch ändern. Weiss allerdings nicht wie ich das in ein Script packen soll. Jemand von Euch ne Idee?

Das sind nämlich insgesamt rund 1000 User. Das möchte ich ungern zu Fuss machen :-)

 

Schonmal besten Dank,

Nepomuk

Link zu diesem Kommentar

Hi folgendes gilt für NEUE benutzer, ich denke bei den bestehenden gibt es ein kleines Problem, oder hilft dir das doch?

Gruß ToM

 

Wie Ändern von angezeigten Namen von Active Directory-Benutzer

 

Zusammenfassung

Wenn in Active Directory ein neuer Benutzer erstellt wird, wird das Vollständiger Name Feld immer in FirstName LastName Format generiert. Dieses Feld legt das Feld Angezeigter Name wiederum auf Erstellung fest, daher formatierte Sie Ende mit einem FirstName LastName Globale Adressliste nach Oben.

 

Mit Hilfe des Adsiedit-Dienstprogramms können Sie diese Änderung vornehmen. Adsiedit ändert nicht nur die Standardmethode zu dem Erstellen der Methode des Felds Angezeigter Name aber tritt in dem ausgewählten Format das Feld Benutzer Vollständiger Name (also das " Cn ") daher auch auf, wenn Sie in den Menüs Benutzer suchen und wenn Computer Snap-In.

Zum Anfang

 

Weitere Informationen

Anweisungen von ADSIEdit

ACHTUNG: Sie können schwerwiegende Probleme verursachen, wenn Sie das ADSI Edit-Snap-in, das LDP-Dienstprogramm oder jedes anderes LDAP-Version 3-Client verwenden und wenn die Attribute der Active Directory-Objekte falsch ändern. Diese Probleme können eine Neuinstallation von Microsoft Windows 2000 Server, Microsoft Exchange 2000 Server oder beiden Programmen erforderlich machen. Microsoft kann nicht dafür garantieren, dass Probleme, die ihre Ursache in einer unkorrekten Änderung von Active Directory-Objekten haben, behoben werden können. Es ist Ihr eigenes Risiko, diese Attribute zu ändern. 1. Fügen Sie ihre Windows 2000 Server-CD ein.

2. Navigieren Sie zu dem Verzeichnis \support\tools.

3. Doppelklicken Sie auf die Datei Support.cab.

4. Suchen Sie das adsiedit.msc Datei und das adsiedit.dll. Extrahieren Sie sie in ihrem Verzeichnis %systemroot%\system32.

5. Führen Sie regsvr32 adsiedit.dll aus.

6. Starten Sie Microsoft Management Console, und fügen Sie dann das ADSI Edit-Snap-In hinzu.

7. Klicken Sie mit der rechten Maustaste auf den oberste Knoten, und klicken Sie dann auf Verbinden mit.

8. Ändern Sie hier in "dem Configuration Container" den Namenskontext, und klicken Sie hier dann auf OK, um zu binden, und zu authentifizieren.

9. Erweitern Sie den Knoten von Configuration Container und erweitern Sie dann den Knoten Konfiguration.

10. Sie erweitert das <B>-cn DisplaySpecifiers = Knoten von </B> und dann doppelklicken Sie auf <B> CN, 409 </B> =. HINWEIS: 409 die Gebietsschemaid für US-Englisch ist. Wenn Sie in einer mehrsprachigen Umgebung sind, müssen Sie Änderungen möglicherweise an die anderen Codes vornehmen. Die meist asiatischen Codes werden bereits festgelegt.

Das ITU und das Internationale Organization for Standardization definieren die Codepagen. Besuchen Sie für Weitere Informationen die folgenden ITU- und die folgenden ISO Web-Seiten:

http://www.itu.int'>http://www.itu.int (http://www.itu.int)

http://www.iso.ch/iso/en/ISOOnline.openerpage'>http://www.iso.ch/iso/en/ISOOnline.openerpage (http://www.iso.ch/iso/en/ISOOnline.openerpage)

Erhalten Sie für weitere Information zu der Unterstützung von lokalisiertem Exchange Clients, wenn unten auf Artikelnummer klickt, um den Beitrag in dem Microsoft Knowledge Base anzuzeigen:

150977 (http://support.microsoft.com/kb/150977/EN-US/) XADM: Unterstützen von lokalisierten Exchange-Clients

11. In dem rechten Fenster öffnet die Eigenschaften Sie " CN User-Display = ".

12. Führen Sie CreateDialog auf der optionalen Eigenschaft einen Bildlauf durch.

13. Das Attribut auf % < Sn> festgelegt. % < GivenName>. Stellen Sie sicher, dass Sie auf Festlegen klicken.

Anmerkung Die einzigen Tokens, die in dem DislayName formatiert werden können, sind % <SN>, % <GivenName> und % <Initialen>.

14. Klicken Sie auf OK, um das Dialogfeld zu schließen.

15. In Active Directory-Benutzer und In-Computer erstellen einen neuen Benutzer; daher der Name ( und der Anzeigename) werden entsprechend ihrer Regel erstellt.

Link zu diesem Kommentar

Danke für die Tipps

 

@Tom

Dein Vorschlag kenne ich. Das wurde auch bereits gemacht - problemlos :-). Es war ja Sinn und Zweck der Sache, dass nicht nur bereits bestehende User-Accounts einen CN und DisplayName, GivenName à la Nachname, Vorname bekommen , sondern auch Accounts die zukünftig angelegt werden.

Mein Problem ist halt eben bei den bereits bestehenden Accounts. Den DisplayName und GivenName konnte ich in einem Rutsch mit nem Script ändern. Den CN allerdings nicht - bis jetzt jedenfalls! Da muss ich wohl noch ein wenig suchen und dängeln :-(

Link zu diesem Kommentar

ui ui ui, in einem gut sortieren Home-Verzeichnis findet sich doch so einiges :D

 

Stand damals selbst vor dem Problem und hab mir da was gezimmert und erstaunlicherweise hat ich nen guten Tag und hab fleissig den Quellcode kommentiert :)

 

Bei uns wurde der DisplayName des Users in Vorname Nachname umgebaut und der CN in nachname.vorname. Das Hexenwerk funktioniert über die MoveHere Methode in VBScript.

 

' ### Script zum Umbennenen der User in einer OU
' ### Tim Riemer, 29.03.2004

' Verbindung zur Domäne
set objRoot = GetObject("LDAP://rootDSE")
strDomain = objRoot.Get("DefaultNamingContext")

' Logdatei anlegen
strScriptPfad = WScript.ScriptFullName
strLogPfad = left(strScriptPfad, InstrRev(strScriptPfad, "\"))

set objFSO = CreateObject("Scripting.FileSystemObject")
with objFSO
dateiPfad = .BuildPath(strLogPfad, "ADNames")
if not .FolderExists(dateiPfad) then .CreateFolder(dateiPfad)
dateiName = "ADNames" & CStr(Now) & ".log"
dateiName = replace(dateiName, ":", "-")
pfadName = .BuildPath(dateiPfad, dateiName)
set objDatei = .CreateTextFile(pfadName)
end with
SchreibLog Now
SchreibLog "Skript gestartet" & vbCrLf

' Benutzer fragen ...
strOU = InputBox("Welcher Container soll bearbeitet werden?" & vbCrLf & "(LDAP-Angabe ohne Domäne)",, "CN=Users")

' Verbindungsstring
strObjOU = "LDAP://" & strOU & "," & strDomain

' OU ansprechen
set objOU = GetObject(strObjOU)

' Log-Zähler initialisieren
intErfolg = 0
intFehler = 0

' ADSI-Fehlermeldungen verfügbar?
on error resume next
set ADError = nothing
set ADError = CreateObject("ADsError")
on error goto 0
if ADError is nothing then
  ADSIError = false
else
  ADSIError = true
end if
set ADError = nothing


objOU.Filter = Array("user")

on error resume next 'Fehler selbst abfangen

For each usr in objOU

if instr(usr.SamAccountName, "$") = 0 AND usr.displayName <> "Service User" then
               strName = usr.get("name")
               schreibLog "Benutzer: " & usr.SamAccountName
	vLast = usr.get("Sn")
	vFirst = usr.get("GivenName")
		vFullname = vFirst + " " + vLast ' für den displayName
		vCN = vLast + "." + vFirst ' für name (= cn)
	vCN = LCASE(vCN)

               ' displayName setzen
    	usr.put "displayName", vFullName
	   	usr.setinfo

               ' name/cn setzen: erfordert Umbenennen durch die "MoveHere"-Methode!
               strRenameCN = "LDAP://cn=" & strName & "," & strOU & "," & strDomain
               set objUsrRename = objOU.MoveHere(strRenameCN, "cn=" & vCN)

               ' Logging: Fehler kontrollieren
               if err.number <> 0 then
                   if ADSIerror then
                     Set objError = CreateObject("ADsError")
                     strKlartext = objError.GetErrorMessage(Err.number)
                   end if
                   SchreibLog "Fehler: " & strKlartext & " " & err.number & ", " & err.description
                   intFehler = intFehler + 1
                   err.Clear
                   if ADSIerror then set objError = nothing
               else
                   SchreibLog "Erfolg"
                   intErfolg = intErfolg + 1
               end if
               SchreibLog vbCrLf
       end if

Next

on error goto 0 'Fehlerbehandlung wieder an

' Erfolgsmeldung ausgeben
saylog intErfolg & " Benutzer bearbeitet, " & intFehler & " Fehler aufgetreten." & vbCrLf
schreibLog Now
schreibLog "Skript beendet"
objDatei.Close


sub SchreibLog(strText)
   ' Funktion: schreibt angegebenen Text in die Logdatei
   ' Eingabeparameter:
   ' Kommentar:

   objDatei.WriteLine strText

end sub


sub saylog(strText)
   msgBox strText
   SchreibLog strText
end sub

 

Das ganze hab ich extra fürs Debugging mit LogFile geschrieben und zudem geht es nur OU weise vor. Somit kannst du es erstmal auf eine Test-OU loslassen und zerschießt dir nicht die AD Struktur.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...