von AutorNils Kaczenski veröffentlicht am9. September 2002, 16:04 Uhr Kurzlink http://faq-o-matic.net/?p=554
Kategorie Kategorie: AD: Daten bearbeiten,Active Directory,Scripting

Unter Windows 2000 war es leider nicht möglich, bei mehreren Objekten gleichzeitig dieselbe Änderung durchzuführen. Seit Windows Server 2003 ist es zwar wieder möglich, mehrere Objekte zu markieren und bestimmte Eigenschaften für alle zu bearbeiten. In vielen Fällen ist jedoch eine skriptgesteuerte Möglichkeit besser. Das folgende Skript dient dazu, den Pfad zum Home-Folder (Basisverzeichnis) mehrerer Benutzer im Active Directory zu ändern.

Dazu liest es alle Benutzerkonten einer bestimmten OU aus (nach dieser wird gefragt) und ersetzt eine bestimmte Zeichenkette durch eine andere Zeichenkette. Dadurch ist es z. B. möglich, einen alten Servernamen durch einen neuen zu ersetzen. Zusätzlich wird eine Logdatei über die durchgeführten Änderungen geführt. Wenn man im Skript das Attribut "homeDirectory" durch ein anderes ersetzt, können auf diese Weise nahezu beliebige Daten im AD bearbeitet werden.

  1. '''''''''''''''''''''''''''''''''''''''''''''
  2. ' HomepfadErsetzen.vbs
  3. ' Version 1.0 vom 4.9.2002
  4. ' Änderung:
  5. '
  6. ' Ersetzt im Homepfad
  7. ' von Benutzerkonten einer anzugebenden OU
  8. ' eine Zeichenkeitte durch eine andere.
  9. '
  10. ' Von Nils Kaczenski (Vorname at Nachname .de)
  11. '
  12. ' Keine Gewähr! Nutzung auf eigene Gefahr!
  13. '
  14. '''''''''''''''''''''''''''''''''''''''''''''
  15.  
  16. ' Verbindung zur Domäne
  17. set objRoot = GetObject("LDAP://rootDSE")
  18. strDomain = objRoot.Get("DefaultNamingContext")
  19.  
  20. ' Logdatei anlegen
  21. strScriptPfad = WScript.ScriptFullName
  22. strLogPfad = left(strScriptPfad, InstrRev(strScriptPfad, "\"))
  23.  
  24. set objFSO = CreateObject("Scripting.FileSystemObject")
  25. with objFSO
  26.     dateiPfad = .BuildPath(strLogPfad, "Profilpfad")
  27.     if not .FolderExists(dateiPfad) then .CreateFolder(dateiPfad)
  28.     dateiName = "homeDirectory_" & CStr(Now) & ".log"
  29.     dateiName = replace(dateiName, ":", "-")
  30.     dateiName = replace(dateiName, "/", "-")
  31.     pfadName = .BuildPath(dateiPfad, dateiName)
  32.     set objDatei = .CreateTextFile(pfadName)
  33. end with
  34. SchreibLog Now
  35. SchreibLog "Skript gestartet" & vbCrLf
  36.  
  37. ' Benutzer fragen …
  38. strOU = InputBox("Welcher Container soll bearbeitet werden?" & vbCrLf _
  39.     & "(LDAP-Angabe ohne Domäne)",, "CN=Users")
  40. strVorher = InputBox("Welcher Wert wird gesucht?" & vbCrLf & vbCrLf _
  41.     & "(z. B. alter Servername)",,"")
  42. strNachher = InputBox("Durch welchen Wert soll er ersetzt werden?" _
  43.     & vbCrLf & vbCrLf & "(z. B. neuer Servername)",,"")
  44.  
  45. SchreibLog "Aufgabe: Ersetze '" & strVorher & "' durch '" & strNachher _
  46.     & "'" & vbCrLf
  47.  
  48. ' Verbindungsstring
  49. strObjOU = "LDAP://" & strOU & "," & strDomain
  50.  
  51. ' OU ansprechen
  52. set objOU = GetObject(strObjOU)
  53. objOU.Filter = Array("user")
  54.  
  55. ' Log-Zähler initialisieren
  56. intErfolg = 0
  57. intFehler = 0
  58.  
  59. ' alle Objekte bearbeiten
  60. ' muss evtl. auf geeignete Objekttypen beschränkt werden
  61. on error resume next 'Fehler selbst abfangen
  62. for each varUser in objOU
  63.         ' Variablen initialisieren
  64.     strSAMname = ""
  65.     strHomeDirectoryOld = ""
  66.  
  67.     set objUser = GetObject("LDAP://" & varUser.Name & "," & strOU _
  68.         & "," & strDomain)
  69.     objUser.GetInfo
  70.     strSAMname = objUser.Get("sAMAccountName")
  71.         strHomeDirectoryOld = objUser.Get("HomeDirectory")
  72.  
  73.         if strHomeDirectoryOld <> "" then
  74.                 strHomeDirectoryNeu = replace(strHomeDirectoryOld, _
  75.                     strVorher, strNachher)
  76.                 objUser.Put "HomeDirectory", strHomeDirectoryNeu
  77.             objUser.SetInfo
  78.  
  79.                 schreibLog "Benutzer: " & strSAMname
  80.  
  81.                 ' Logging: Fehler kontrollieren
  82.                 if err.number <> 0 then
  83.                      SchreibLog "Fehler: " & err.number & ", " _
  84.                          & err.description
  85.                      intFehler = intFehler + 1
  86.                      err.Clear
  87.                 elseif strHomeDirectoryOld <> "" then
  88.                      SchreibLog "Erfolg"
  89.                      SchreibLog "Alter Wert: " & strHomeDirectoryOld
  90.                      SchreibLog "Neuer Wert: " & strHomeDirectoryNeu
  91.                      intErfolg = intErfolg + 1
  92.                 end if
  93.                 SchreibLog vbCrLf
  94.     end if
  95.  
  96. next
  97.  
  98. on error goto 0 'Fehlerbehandlung wieder an
  99.  
  100.  
  101. ' Erfolgsmeldung ausgeben
  102. saylog intErfolg & " Benutzer bearbeitet, " & intFehler _
  103.     & " Fehler aufgetreten." & vbCrLf
  104. schreibLog Now
  105. schreibLog "Skript beendet"
  106. objDatei.Close
  107.  
  108.  
  109. sub SchreibLog(strText)
  110.     ' Funktion: schreibt angegebenen Text in die Logdatei
  111.     ' Eingabeparameter:
  112.     ' Kommentar:
  113.  
  114.     objDatei.WriteLine strText
  115.  
  116. end sub
  117.  
  118.  
  119. sub saylog(strText)
  120.  
  121.     msgBox strText
  122.     SchreibLog strText
  123.  
  124. end sub

 

Verwandte Beiträge:

  1. Wie kann ich meine Benutzer als "Nachname, Vorname" anzeigen?
    In der Standardeinstellung werden in Active Directory die Namen von Benutzerkonten (und anderen Objekten, z. B. Kontakten) in der Form "Vorname...
  2. Wie kann ich für alle Benutzer ein Home-Verzeichnis anlegen?
    Dass beim Anlegen eines Benutzers automatisch ein Home-Verzeichnis (Basisordner) angelegt wird, ist kein Feature des Active Directory, sondern des Verwaltungsprogramms....
  3. Den LDAP-Pfad eines AD-Objekts anzeigen
    Im Verwaltungsprogramm "Active Directory-Benutzer und -Computer" (ADUC) gibt es keine Möglichkeit, den LDAP-Pfad zu vorhandenen Objekten anzuzeigen. In vielen Fällen...
  4. „Benutzer kann Passwort nicht ändern“-Option auf Abwegen
    Neulich rief ein Kollege bei mir an und berichtete mir, dass einige Benutzer ihre Domänenpasswörter nicht mehr ändern konnten. Sie...
  5. Warum kann ein Benutzer Dateien ändern, für die er keine Rechte hat?
    Benutzer können Dateien löschen, auf die sie keinen Zugriff haben. Das ist das, was als Feature (!) dokumentiert ist, sich...