'****************************************************************************** ' ' OUsBenutzerFreigabenErstellen.txt ' ' !!!! Umbenennen in OUsBenutzerFreigabenErstellen.vbs !!!!! ' ' ' Autor: Franz Kohnle, http://www.kohnlehome.de/ ' ' ' Script zum Erstellen von OUs und Benutzern im Active Directory und NTFS-Freigaben ' ' 1. Es wird die aktuelle Domäne ermittelt (z.B. "c206.gbs") ' ' 2. Es wird in der aktuellen Domäne eine OU erstellt (z.B. "4TAIC") ' ' 3. Es wird ein Verzeichnis erstellt (z.B. "c:\4TAIC") ' ' 4. In der OU (z.B. "4TAIC") werden Benutzer erstellt (z.B. "adminC00" ... "adminC25") ' ' 5. Es werden SubOUs erstellt (z.B. "Firma00" ... "Firma25") ' ' mit folgenden Sicherheitseinstellungen: ' ' Domänen-Admins: ' Uneingeschränkter Zugriff für dieses und alle untergeordneten Objekte ' ' adminCXX: ' Uneingeschränkter Zugriff für dieses und alle untergeordneten Objekte ' ' 6. Es werden (z.B. in "c:\4TAIC") Unterverzeichnisse erstellt (z.B. "FirmaC00" ... "FirmaC25") ' ' Domänen-Admins: ' Uneingeschränkter Zugriff für dieses und alle untergeordneten Objekte ' ' adminCXX: ' Uneingeschränkter Zugriff für dieses und alle untergeordneten Objekte ' ' Die Unterverzeichnisse werden freigegeben ' '****************************************************************************** ' ' Vorgehensweise zum Erstellen der OUs, SubOUs, Benutzer und Freigaben: ' ' 1. Dieses Skript auf den Server kopieren, auf dem alles erstellt werden soll ' ' 2. Dieses Skript umbenennen in OUsBenutzerFreigabenErstellen.vbs ' ' 3. Werte der Konstanten OU, User, SubOU, Verz, SubVerz, min, max anpassen ' ' (der Name der Domäne muss nicht angegeben werden, ' er wird automatisch vom Skript ermittelt) ' ' 4. Skript speichern ' ' 5. Skript als Administrator durch Doppelklick starten ' ' Das Skript ist leider noch nicht perfekt. ' Folgende Einstellungen müssen noch manuell erledigt werden: ' ' - Für sämtliche OUs Vererbung unterbrechen und entfernen ' ' - Für jeden Benutzer einstellen: Benutzer kann Kennwort nicht ändern ' '****************************************************************************** Option Explicit '****************************************************************************** ' folgende Konstanten können geändert werden ' sonst muss nichts angepasst werden '****************************************************************************** Const OU = "4TAIC" ' Name der Top-Level-OU Const User = "adminC" ' Name der Benutzer (es werden noch Nummern angehängt) Const SubOU = "Firma" ' Name der Sub-OUs (es werden noch Nummern angehängt) Const Verz = "g:\4TAIC" ' Name des Verzeichnisses Const SubVerz = "FirmaC" ' Name der Unterverzeichnisse ' (es werden noch Nummern angehängt) Const min = 0 ' kleinste Nummer Const max = 25 ' größte sNummer '*********************************************** ' Sonstige Variablendeklarationen '*********************************************** Dim oRoot, strDomainPath, oDomain, oOU, i Dim strDomainName, arrFeld, strTeil Dim strUserName, oUser, strSubOU, oSubOU, strNummer Dim oSecDesc, oDAcl, oAce Dim strMin, strMax Dim oFso, oVerz Dim oWMIService, oFreigabe, err, strSubVerz, oShell '*********************************************** ' 1. Domäne ermitteln '*********************************************** '*********************************************** ' 1.a) LDAP Pfad für Domäne ermitteln '*********************************************** Set oRoot = GetObject("LDAP://RootDSE") strDomainPath = oRoot.Get("DefaultNamingContext") 'in strDomainPath steht z.B. "DC=c206,DC=GBS" Set oRoot = Nothing '*********************************************** ' 1.b) Zeiger auf Domänen-Objekt '*********************************************** Set oDomain = GetObject("LDAP://" & strDomainPath) '*********************************************** ' 1.c) Domänenname z.B. "c206.gbs" ermitteln '*********************************************** strDomainName = strDomainPath ' z.B "DC=c206,DC=GBS" strDomainName = Replace (strDomainName, "," , ".") ' z.B "DC=fenster.DC=c206.DC=GBS" arrFeld = Split(strDomainName, "DC=") strDomainName = "" For Each strTeil in arrFeld strDomainName = strDomainName & strTeil Next '*********************************************** ' 1.d) Ausgabe Domäne '*********************************************** Wscript.Echo "Aktuelle Domäne: " & strDomainPath _ & vbCrLf & "Domänenname: " & strDomainName '*********************************************** ' 2. Top Level OU (z.B. "4TAIC") '*********************************************** '*********************************************** ' 2. a) OU erstellen '*********************************************** Set oOU = oDomain.Create("organizationalUnit", "OU=" + OU) oOU.Put "Description", OU oOU.SetInfo '*********************************************** ' 2. b) Sicherheitseinstellungen der OU '*********************************************** '*********************************************** ' hier fehlt noch: ' Sicherheitseinstellung für OU: ' - Vererbung unterbrechen '*********************************************** '*********************************************** ' ACL für OU ändern '*********************************************** Set oSecDesc = oOU.Get("ntSecurityDescriptor") Set oDAcl = oSecDesc.DiscretionaryAcl '*********************** ' alte ACEs entfernen '*********************** For each oAce in oDAcl oDAcl.RemoveACE oAce Next '************************************* ' ACE für Domänen-Admins (Vollzugriff) '************************************* strUserName = "Domänen-Admins" Set oAce = CreateObject("AccessControlEntry") oAce.Trustee = strUserName oAce.AccessMask = &H10000000 'uneingeschränkter Zugriff oAce.AceFlags = 2 'Diese und alle Untergeordneten oDAcl.AddACE oAce Set oAce = Nothing '********************************* ' ACE für Domänen-Benutzer (Lesen) '********************************* strUserName = "Domänen-Benutzer" Set oAce = CreateObject("AccessControlEntry") oAce.Trustee = strUserName oAce.AccessMask = &H80000000 'Lesen oAce.AceFlags = 2 'Diese und alle Untergeordneten oDAcl.AddACE oAce Set oAce = Nothing '*********************** ' DACL wieder OU zuweisen '*********************** oSecDesc.DiscretionaryAcl = oDAcl oOU.Put "ntSecurityDescriptor", oSecDesc oOU.SetInfo '*********************************************** ' Aufräumen '*********************************************** Set oSecDesc = Nothing Set oDAcl = Nothing Set oDomain = Nothing '*********************************************** ' 2. c) Ausgabe Top Level OU '*********************************************** Wscript.Echo "Die OU " & OU & " wurde in der Domäne " _ & strDomainPath & " erstellt." '*********************************************** ' 3. Verzeichnis (z.B. "c:\4TAIC") '*********************************************** '*********************************************** ' 3.a) Verzeichnis erstellen '*********************************************** Set oFso = CreateObject("Scripting.FileSystemObject") Set oVerz = oFso.CreateFolder(Verz) '*********************************************** ' 3.b) Ausgabe Verzeichnis und aufräumen '*********************************************** Set oVerz = Nothing Set oFso = Nothing Wscript.Echo "Das Verzeichnis " & Verz & " wurde angelegt." _ & vbCrLf _ & "Das Anlegen der Benutzer, OUs und Unterverzeichnisse kann ca. 30 Sekunden dauern." '*********************************************** ' Schleife für ' 4. Benutzer adminC00 ... adminC25 erstellen ' 5. OUs Firma00 ... Firma25 erstellen ' (incl. Sicherheitseinstellungen) ' 6. Freigaben Firma00 ... Firma25 erstellen ' (incl. Sicherheitseinstellungen) '*********************************************** For i = min to max '*********************************************** ' strNummer bestimmen ( evtl. 0 anhängen) '*********************************************** If i < 10 Then strNummer = "0" & i Else strNummer = i End If '*********************************************** ' 4. Benutzer adminC00 ... adminC25 '*********************************************** strUserName = User & strNummer '****************************************** ' Benutzer in der Top Level OU erstellen '****************************************** Set oUser = oOU.Create("user", "CN=" & strUserName) oUser.Put "sAMAccountName", strUserName oUser.Put "userPrincipalName", strUserName '+ oDomain.Get("name") oUser.Put "userAccountControl", 66112 'Kennwort läuft nie ab oUser.SetInfo oUser.AccountDisabled = False oUser.Title = strUserName oUser.DisplayName = strUserName oUser.SetPassword strUserName oUser.SetInfo Set oUser = Nothing '********************************************* ' !!!!! F E H L T N O C H !!!!!!!!!!!! ' - Benutzer kann Kennwort nicht ändern ' '********************************************* '*********************************************** ' 5. OUs Firma00 ... Firma25 erstellen ' (incl. Sicherheitseinstellungen) '*********************************************** strSubOU = SubOU & strNummer '*********************************************** ' SubOU erstellen '*********************************************** Set oSubOU = oOU.Create("organizationalUnit", "OU=" + strSubOU) oSubOU.Put "Description", strSubOU oSubOU.SetInfo '*********************************************** ' hier fehlt noch: ' Sicherheitseinstellung für Sub-OU: ' - Vererbung unterbrechen '*********************************************** '*********************************************** ' ACL für SubOU ändern '*********************************************** Set oSecDesc = oSubOU.Get("ntSecurityDescriptor") Set oDAcl = oSecDesc.DiscretionaryAcl '*********************** ' alte ACEs entfernen '*********************** For each oAce in oDAcl oDAcl.RemoveACE oAce Next '******************************* ' ACE für adminCXX (Vollzugriff) '******************************* Set oAce = CreateObject("AccessControlEntry") oAce.Trustee = strUserName oAce.AccessMask = &H10000000 'uneingeschränkter Zugriff oAce.AceFlags = 2 'Diese und alle Untergeordneten oDAcl.AddACE oAce Set oAce = Nothing '************************************* ' ACE für Domänen-Admins (Vollzugriff) '************************************* Set oAce = CreateObject("AccessControlEntry") oAce.Trustee = "Domänen-Admins" oAce.AccessMask = &H10000000 'uneingeschränkter Zugriff oAce.AceFlags = 2 'Diese und alle Untergeordneten oDAcl.AddACE oAce Set oAce = Nothing '********************************* ' ACE für Domänen-Benutzer (Lesen) '********************************* Set oAce = CreateObject("AccessControlEntry") oAce.Trustee = "Domänen-Benutzer" oAce.AccessMask = &H80000000 'Lesen oAce.AceFlags = 2 'Diese und alle Untergeordneten oDAcl.AddACE oAce Set oAce = Nothing '*********************** ' DACL wieder OU zuweisen '*********************** oSecDesc.DiscretionaryAcl = oDAcl oSubOU.Put "ntSecurityDescriptor", oSecDesc oSubOU.SetInfo '*********************************************** ' Aufräumen '*********************************************** Set oSubOU = Nothing Set oSecDesc = Nothing Set oDAcl = Nothing '*********************************************** ' 6. Unterverzeichnisse ("FirmaC00" ... "FirmaC25") erstellen '*********************************************** '*********************************************** ' 6.a) Unterverzeichnis erstellen '*********************************************** Set oFso = CreateObject("Scripting.FileSystemObject") strSubVerz = Verz & "\" & SubVerz & strNummer Set oVerz = oFso.CreateFolder(strSubVerz) '*********************************************** ' 6.b) Sicherheitseinstellungen des Verzeichnisses '*********************************************** Set oShell = WScript.CreateObject("WScript.Shell") ' Domänen-Admins: V oShell.Run "cmd /c echo j| cacls " & strSubVerz & " /G Domänen-Admins:F", , False ' adminXX: V oShell.Run "cmd /c echo j| cacls " & strSubVerz & " /E /G " & strUserName & ":F", , False Set oShell = Nothing '*********************************************** ' 6.c) Verzeichnis freigeben '*********************************************** Set oWMIService = _ GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set oFreigabe = oWMIService.Get("Win32_Share") err = oFreigabe.Create(Verz & "\" & SubVerz & strNummer, _ SubVerz & strNummer, 0, 25, "Freigabe für " & strUserName) '*********************************************** ' 6.d) aufräumen '*********************************************** Set oVerz = Nothing Set oFso = Nothing Next '********************************************** ' Aufräumen '*********************************************** Set oOU = Nothing '*********************************************** ' Ausgabe Benutzer, OUs, Freigaben '*********************************************** '*********************************************** ' strMin, strMax bestimmen ( evtl. 0 anhängen) '*********************************************** If min < 10 Then strMin = "0" & min Else strMin = min End If If max < 10 Then strMax = "0" & max Else strMax = max End If Wscript.Echo "Die Benutzer " & User & strMin & " ... " _ & User & strMax & "," & vbCrLf _ & "die SubOUs " & SubOU & strMin & " ... " & SubOU & strMax _ & vbCrLf & "und die Unterverzeichnisse " _ & SubVerz & strMin & " ... " & SubVerz & strMax _ & " wurden erstellt." & vbCrLf _ & "Die Unterverzeichnisse wurden freigegeben" & vbCrLf & vbCrLf _ & "Das Skript wurde erfolgreich ausgeführt."