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

Wie kann ich den Pfad zum Home-Folder mehrerer Benutzer (oder auch andere Werte) ändern?

von veröffentlicht am9. September 2002, 16:04 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Active Directory, AD: Daten bearbeiten, Benutzerprofile, Scripting   Translate with Google Translate Translate EN   Die angezeigte Seite drucken
Zuletzt aktualisiert: 26. September 2013

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

 

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