IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Visual Basic - Benutzer per Script im Active Directory anlegen



Benutzer per Script im Active Directory anlegen

Benutzer anlegen im Active Directory ist nicht schwer, was aber wenn man mehrere Hundert Benutzer aufeinmal anlegen möchte, von denen jeder auch noch Homeverzeichnisse bekommen soll? Entweder verwendet man Stunden/Tage um die Benutzer per Hand hinzuzufügen oder man benutzt ein Script.


Autor: Martin Dethlefsen (Psyrius)
Datum: 16-12-2003, 23:41:23
Referenzen: http://www.mcseboard.de
Schwierigkeit: Profis
Ansichten: 82232x
Rating: 9.5 (8x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



1. Problemstellung:

Es sollen 350 Benutzer im Active Directory angelegt werden. Jeder Benutzer soll einen Ordner auf dem Server zur Verfügung gestellt bekommen auf den nur er und der Administrator Zugriff hat.
Dieser Ordner soll bei der Anmeldung am Client automatisch als Netzlaufwerk eingebunden werden. Der Benutzer soll ebenfalls sein persönliches Windows-Profil vom Server beziehen.
Da der Administrationsaufwand sehr hoch ist, wenn man jeden Benutzer einzeln im Active Directory anlegt, wird ein Visual Basic Script benutzt.
Dieses Script liest aus einem Textfile die benötigten Daten aus.

2. Das Visual Basic Script:
Dim fso, f, Zeile, Feld
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile ("user.txt",1,0)

Do while not f.AtEndOfLine
Zeile = f.readLine
Feld = split(Zeile,",")
Benutzer = Feld(0)
Vorname = Feld(1)
Nachname = Feld(2)
Passwort = Feld(3)
Call BenuntzerAnlegen(Benutzer,Vorname,Nachname,Passwort)
Loop
f.Close
Wscript.Quit(0)

Sub BenuntzerAnlegen(Benutzer,Vorname,Nachname,Passwort)
Dim ouo, b
Set ouo = GetObject("LDAP://OU=OrganisationUnit,DC=DomainName,DC=TopLevelDomain")
Set b = ouo.Create("user", "CN=" & Vorname & " " & Nachname)
Dim WshShell, ret
Set WshShell = WScript.CreateObject("WScript.Shell")
b.Put "sAMAccountName", Benutzer
b.Put "displayName", Vorname & " " & Nachname
b.Put "givenName", Vorname
b.Put "sn", Nachname
b.Put "userAccountControl", 66082
b.Put "userPrincipalName", Benutzer & "@DomainName.TopLevelDomain"
b.Put "profilePath", "\\Server\daten\profile\" & Benutzer
b.Put "homeDirectory", "\\Server\daten\home\" & Benutzer
b.Put "homeDrive", "H:"
b.SetInfo
b.SetPassword Passwort
b.AccountDisabled = False
b.SetInfo
WScript.Sleep(1000)
ret = WshShell.Run ("verz.cmd " & Benutzer,0,1)
End Sub
Erklärung:

Das Script sollte man so wie es oben steht in den Editor kopieren und dann mit der Endung "*.vbs" speichern. Das Script liest zuerst aus der Datei "User.txt" den Datensatz für einen Benutzer. Die Attribute in der Datei "User.txt" werden per Komma getrennt und die Reihe muss mit KEINEM Zeichen beendet werden. Die Attribute werden Ausgelesen und in den Feldern 0-3 gespeichert:
  • Feld 0 enthält den Benutzernamen und wird der Variablen Benutzer zugewiesen
  • Feld 1 enthält den Vornamen und wird der Variable Vorname zugewiesen
  • Feld 2 enthält den Nachnamen und wird der Variable Nachname zugewiesen
  • Feld 3 enthält das Passwort und wird der Variable Passwort zugewiesen
Nachdem ein Datensatz eingelesen wurde, wird die Subroutine "BenutzerAnlegen" mit den Parametern Benutzer, Vorname, Nachname, Passwort aufgerufen und die Datei "User.txt" geschlossen.
Die Subroutine erstellt einen neuen Benutzer in einer im Script angegebenen Organisationseinheit der Domäne. Der Benutzer bekommt eine Bezeichnung aus Vor- und Nachnamen.

Das LDAP-Feld des NT-Anmeldenamens [sAMAccountname] wird mit der Variablen Benutzer gefüllt.

Das Feld "givenName" wird mit der Variablen Vorname gefüllt.

Das Feld "sn" wird mit der Variablen Nachname gefüllt.
Das Feld "userAccountControl" bekommt den Wert "66082" zugeordnet und bewirkt, dass das Passwort des Accounts nicht abläuft.
Wenn man möchte, dass der Benutzer sein Passwort bei der nächsten Anmeldung selber vergeben soll, muss man im Script die Zeile

b.Put "pwdLastSet", 0

einfügen.
Das Feld "userPrincipalName" wird mit der Variablen Benutzer, dem Zeichen "@" und dem Full Qualified Domin Name (FQDN) belegt.
Das Feld "profilePath" gibt den Profilpfad an.
Das Feld "HomeDirectory" gibt den Pfad des Stammverzeichnis an.
Profipfad und Stammverzeichnis werden zum Teil vorgegeben nur die Variable "Benutzer" dem Pfad als weiterer Ordner zugefügt.
Das Feld "homeDrive" gibt den Laufwerksbuchstaben des Stammverzeichnis an, welches automatisch als Netzlaufwerk verbunden wird.
Das Passwort wird eingerichtet und der Account wird aktiviert.
Jetzt ruft das Script die Datei "Verz.cmd" auf.

3. Die Datei Verz.cmd:

md
echo J | cacls /C /E /G Administratoren:F
echo J | cacls /C /E /G Domain.TopLevelDomain
echo J | cacls /C /E /R Jeder
md
echo J | cacls /C /E /G Administratoren:F
echo J | cacls /C /E /G Domain.TopLevelDomain
echo J | cacls /C /E /R Jeder

Erklärung:

Die Datei "Verz.cmd" erstellt einen Ordner mit dem Benutzernamen im vorgegebenen Stammverzeichnis. Die Zugriffsberechtigungen für diesen Ordner werden ebenfalls automatisch gesetzt.
Auf diesen Ordner haben der Benutzer und der Administrator Vollzugriff und jeder andere Benutzer hat keine Zugriffsrechte auf die Daten.
Dann wird ein Ordner für das Benutzerprofil erstellt, für den gleiches in Bezug auf Namensgebung und Rechtevergabe gilt.
Da das Script eine Schleife beinhaltet, wird dieser Vorgang solange wiederholt bis in der Datei "User.txt" kein weiterer Eintrag vorhanden ist.

4. Die Datei "User.txt":

Benutzeranmeldename1,Vorname1,Nachname1,Passwort1
Benutzeranmeldename2,Vorname2,Nachname2,Passwort2
Benutzeranmeldename3,Vorname3,Nachname3,Passwort3
Benutzeranmeldename4,Vorname4,Nachname4,Passwort4
Benutzeranmeldename5,Vorname5,Nachname5,Passwort5
Benutzeranmeldename6,Vorname6,Nachname6,Passwort6
Benutzeranmeldename7,Vorname7,Nachname7,Passwort7
Benutzeranmeldename8,Vorname8,Nachname8,Passwort8
Benutzeranmeldename9,Vorname9,Nachname9,Passwort9
"Und so weiter und so fort bis keiner mehr da ist" :D

Erklärung:

In der Datei "User.txt" sind alle Informationen enthalten, die benötigt werden, um die neuen Benutzerkonten anzulegen. Die Daten innerhalb der Datei müssen nach folgendem Schema angeordnet sein
  • Benutzerkonto1,Vorname1,Nachname1,Passwort1
  • Benutzerkonto2,Vorname2,Nachname2,Passwort2
Die Reihen werden NICHT mit einem Zeichen abgeschlossen.

5. Besonderheiten bei Windows 98 Clients:

Dieses Anmeldescript funktioniert problemlos bei Windows 2000 oder Windows XP Prof. Clients. Sobald man jedoch versucht einen Windows 98-Client zu benutzen, bekommt man ein paar Schwierigkeiten, da Windows 98 kein richtiges Netzwerkbetriebssystem ist. Windows 98 ist nicht in der Lage die Homeverzeichnisse zu verbinden, wenn im Verzeichnispfad eine Variable angegeben ist. Um dieses Problem zu lösen, muss man sich ein Anmeldescript schreiben, welches das Betriebssystem prüft und im Fall von Windows 98 das Programm "putinenv.exe" (im Internet frei erhältlich) in das Betriebssystem einbindet. Dieses Programm erlaubt Windows 98 das Interpretieren der Variablen in der Pfadangabe.

6. Implementation ins Netzwerk:

Es müssen lediglich ein paar Anpassungen gemacht werden, um das Script in Ihrem System zu verwenden.

Variablen im Visual Basic Script:

OrganisationUnit:

bezeichnet die Organisationseinheit in der der neue Benutzer angelegt wird.

DomainName:

bezeichnet den Namen ihrer Domäne

TopLevelDomain:

bezeichnet den Namen ihrer Top Level Domäne

\\Server\daten\profile\:

bezeichnet den Pfad des Benutzerprofils.

\\Server\daten\home\:

bezeichnet den Pfad des die Stammverzeichnis des Benutzers.

Variablen in der Datei "Verz.cmd"

\\Server\daten\home\:

bezeichnet den Pfad in dem das Stammverzeichnis des Benutzers angelegt wird.

\\Server\daten\profile\:

bezeichnet den Pfad in dem das Profil des Benutzers angelegt wird.


noreen
Rookie
Beitrag vom:
13-05-2011, 18:33:42

Hallo, hallo...

ich habe mit Ber batchdatei unter 'nem W2K8 Probleme...

hat das schon jemand anderes mal getestet und angepasst....?

LG, Noreen

-----------------------------------------------------


vbbuser
Rookie
Beitrag vom:
10-09-2010, 07:16:02

bekomme einen Fehler wenn ich Leerfelder importiere

Sollte in meiner User.txt bei einem Benutzer ein Feld nicht gefüllt sein, dann bekomme ich einen Fehler im Script. Gibt es hier eine möglichkeit? z.B wenn ich Emailadressen mit importiere und ein user hat keine Adresse.

Sonst funzt das Script Klasse. hat jemand eine Idee?

-----------------------------------------------------


pit850
Rookie
Beitrag vom:
01-10-2008, 17:26:36

Das ist gut

Das Script ist klasse. Funktioniert auch soweit ganz gut bis auf den aufruf der Verz.cmd-Datei. Mein System kann diese Datei nicht finden und steigt aus dem Script aus.
Lasse ich den Aufruf der Verz.cmd weg läuft das Script ohne Murren durch.
Hat jemand eine Erklärung oder kann mir da weiter helfen.

Danke Peter

-----------------------------------------------------


ADguru
Rookie
Beitrag vom:
05-08-2008, 14:35:23

Professionellen Einsatz

Für den Professionellen Einsatz sind Scripts nicht zwingend geeignet. Als alternative habe ich Erfahrungen mit dem PRodukt ADProfiler gemacht.

Bei einem Synchronisationsvorgang liest der ADprofiler die Daten zunächst aus der Datenquelle um sie in das in das Active Directory zu übernehmen. Auf dem Weg zwischen der Datenquelle und dem Active Directory können die Informationen durch Formeln modifiziert werden, wobei auch die Eindeutigkeit sichergestellt werden kann. Im Rahmen der Synchronisation können aber auch E-Mail-Einstellungen konfiguriert, Organisationseinheiten erstellt, Ordner im Dateisystem angelegt, Zugriffsberechtigungen gesetzt und weitere Aktivitäten ausgeführt werden.

guckst du: http://www.infoweek.ch/archive/ar_single.cfm?ar_id=14094&



-----------------------------------------------------


JB
Rookie
Beitrag vom:
19-02-2007, 21:09:28

Weitere Attribute setzen

hallo
hab es zwar noch nicht getestet das skript, aber ich finde es sehr ansprechend.

ich hätte die frage welche variable ich setzen muss im skript, um auch eine Beschreibung bei den Benutzern hinzuzufügen.


Mittlerweile wollt ich dieses Skript einsetzen nur funktioniert bei mir das Verz.cmd Skript nicht kann mir jemand dabei helfen wie ich das umschreiben muss damit es funktioniert???

besten dank im voraus.

mfg
bernhard

-----------------------------------------------------


Sniperone
Rookie
Beitrag vom:
14-11-2006, 13:15:24

hallo

Super Script nur eine frage funkt.
das auch auf dem 2003 Server.

Ich habe schon einen script, nur der script hat das nicht mit dem ordner und das würde ich gerne ändern.

Danke im voraus für Antwort

-----------------------------------------------------


Gladiator
Rookie
Beitrag vom:
21-03-2005, 13:29:42

Benutzer per Script im Active Directory anlegen

Hallo,

Das Script ist Klasse, aber bei mir funzt das nicht so richtig. Ich bekomme die Fehlermeldung:
Zeile 19
Zeichen 1
Eine Referenzauswertung wurde vom Server zurückgesendet.
Code: 8007202B
Quelle: (null)
An was kann das liegen? Könntest du mir einen Tipp geben?

-----------------------------------------------------


red
Junior-Member
Beitrag vom:
17-12-2003, 12:11:07

Super...

Sowas habe ich schon gesucht, habe zwar nicht viele Benutzer allerdings ist es trozdem praktisch! Mehr davon...

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04510
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06247
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1158
Comments: 0