300

Windows Domainbenutzer via Script - also per Batch - anlegen

Mitglied: TimoBeil
25.03.2011
23:02:37 Uhr
6167 Aufrufe
5 Antworten
"Eigentlich" ein alter Hut und auch hier schon x mal durchgekaut - aber leider öfters unter falscher Flagge oder der jeweilige Titel ist nicht wirklich Suchmaschinenkonform.
Dahe auch die Doppeldeutige Benennung Script & Batch - wobei ich ja mit einer Steuerbatch ein VBS Script starte, dass innerhalb wiederrum cmd Befehle startet.
Vorab:
Die Steuerbatch - wie (bei mir) immer geht die Batch davon aus, dass Sie im Ordner c:\script\schnippselname liegt.
Da diese Schnippsel etwas mit der AD zu tun haben, also von C:\script\ad\
Diese Pfade entweder übernehmen oder anpassen
Bei uns ist die Personalnummer "der" eindeutige Schlüssel deswegen und weil die relativ kurz ist - wird diese als allererste abgefragt und die eingegbenen Daten im Scriptordner als output-personalnummer.txt abgelegt.
Wer das braucht, kann es übernehmen, wer nicht ändern oder so ist das ganze ja auch gedacht als Anleitung, was man mit ein paar zeilen stricken kann.
Denn Hand aufs Herz, gerade bei solch Lapalien, wie User anlegen klingelt immer wieder gerne mal das Telefon, oder der Kaffe ist alle und man weiß nicht mehr, wo man (beim anlegen des Users) stehen geblieben ist.

Ganz ohne @echo off - jeder, der das Teil übernehmen will, darf das natürlich so anpassen, wie er lustig ist - der interessante Teil ist jedoch eh im VBS "versteckt"
Ich hoffe, die folgenden Zeilen sind für einen ausgewachsenen Admin selbsterklärend für euch schreib ich das ja nieder.

Die Steuerbatch:
01.
:start 
02.
@Title "Benutzer in %Userdomain% anlegen" 
03.
@color f1 
04.
@Set /p Perso="Perso :"  
05.
@Title "Benutzer in Sfv.local anlegen - Personalnummer: %perso%" 
06.
 
07.
if exist C:\script\ad\output-%perso%.txt @echo "Achtung diese Personalnummer ist schon vergeben" && color fc && type C:\script\ad\output-%perso%.txt && pause 
08.
@Set /p yn="yn :" 
09.
 
10.
@cscript "C:\script\ad\Domainuser_anlegen.vbs" //NoLogo>C:\script\ad\output-%perso%.txt

Das vbs geht davon aus, dass die User nach:
  • vorname.nachname benamst werden
  • vorname.nachname@domain.suffix daher auch die SMTP Adresse ist
  • jeder auf sein gemapptes Homedir als H:\ auf \\homeserver\user\%username% bekommt
  • jeder auf sein Profil auf \\profilserver\profil\%username% bekommt
  • es sich nur um einen Standort handelt
  • daher jeder bis auf seine eigene Durchwahl die Telefonnummer 1234567 hat
  • alle das gleich loginscript im Netlogon haben, dass "login.cmd" heisst
  • der Benutzer in der OU "User" angelegt wird
  • dieser oben benannte Primärschlüssel in die Beschreibung geschrieben wird
(nein - eigentlich nicht, aber ich hab bei uns das Schema erweitert und die Info wäre zu eurer Umgebung nicht kompatibel)
  • die Postleitzahl 67890 lautet#
  • Die Firma im Ernst Eiswuerfelweg 69 beheimatet ist
  • Selbstverfreilich die Webseite des Benutzers unter http://www.administrator.de zu erreichen ist
  • der Benutzer in die Domain Globe Gruppe globale_mastergruppe gehoben wird.
  • der User durch den trick diesen zuerst deaktiviert anzulegen und Ihn erst später "sleep 5000" zu aktivieren - dieser trotz nicht ausgehebelter Domainpasswordpolicy kein std. Passwort hat und sich bei der ersten Anmeldung dieses (der Domainpasswordpolicy entsprechend akzeptierte) Password selber aussucht.

Logischweise ist dieses hier präsentierte Script nur ein minimaler Teil dessen, was wirklich bei mir läuft, und hat - obwohl es ein oller seit einem Jahrzehnt funktionierender Hut ist - so im status ungetestet - denn beim AD User anlegen gilt noch viel mehr, als bei anderen Scripten - ein falsches Zeichen tausend mal nix passiert auf einmal schnöde im Rohr krepiert.
Mit anderen worten, da ist keine Zeile speziell die Wscript sleep Zeile zuviel drin, eher zuwenig - da minimalisiert.
Durch die obige Liste sollte das aber jeder halbwegs logischdenkende mit [Strg] [H] [Strg][V] neuer Wert selber so gradebiegen können.

01.
dim rootDSE 
02.
set rootDSE = GetObject("LDAP://RootDSE") 
03.
domainname=rootDSE.Get("defaultnamingcontext") 
04.
 
05.
set domain = GetObject("LDAP://" & domainname) 
06.
 
07.
' Popup Benutzername 
08.
Vname = InputBox("Vorname?") 
09.
NName = InputBox("Nachname?") 
10.
 
11.
'check if samid is to long 
12.
Name =  Vname & "." & NName 
13.
Anzahlzeichen=Len(Name) 
14.
if Anzahlzeichen > 20 Then 
15.
	shortname = Left (Name,20) 
16.
	msgbox "Der Anmeldename " & Name & " ist länger als die erlaubten als 20 Zeichen!" 
17.
	msgbox "Der Anmeldename " & Name & " wird auf" & shortname & " gekürzt" 
18.
End If 
19.
 
20.
if shortname = "" then 
21.
	shortname = Name 
22.
End If 
23.
 
24.
logon = Name & "@domain.local" 
25.
mail = Name & "@domain.suffix" 
26.
home ="\\homeserver\user\" & Name 
27.
 
28.
' Popup Telefonnummerndurchwahl: 1234567 
29.
intTel = InputBox("Telefondurchwahl?-1234567") 
30.
 
31.
Telefon = "+49 1234567 " & intTel 
32.
 
33.
' Popup Personalnummer 
34.
Perso = InputBox("Personalnummer") 
35.
 
36.
' Ausgabe in Text 
37.
WScript.Echo "Name" &"," & "Telefon" &"," & "Personalnummer" 
38.
WScript.Echo Name & "," & intTel & "," & Perso 
39.
 
40.
 
41.
' Ordner anlegen 
42.
Set WshShell = WScript.CreateObject("WScript.Shell") 
43.
Return = WshShell.Run("Cmd /c md \\profilserver\profil\" & Name) 
44.
Return = WshShell.Run("Cmd /c md \\homeserver\user\" & Name) 
45.
Set WshShell = Nothing  
46.
 
47.
' User anlegen 
48.
Set usr = domain.Create("user", "CN=" & Name & ",OU=User") 
49.
usr.Put "samAccountName", shortname 
50.
usr.Put "givenName", Vname 
51.
usr.Put "sn", Nname 
52.
usr.Put "DisplayName", Name 
53.
usr.Put "homeDirectory", home 
54.
usr.Put "homeDrive", "h:" 
55.
usr.Put "profilePath","\\profilserver\profil\" & Name & "\" 
56.
usr.Put "scriptPath", "login.cmd" 
57.
usr.Put "telephoneNumber", Telefon 
58.
usr.Put "HomePhone", Telefon 
59.
usr.Put "employeeID", Perso  
60.
usr.Put "postalCode", "67890" 
61.
usr.Put "StreetAddress" , "Ernst Eiswuerfelweg 69" 
62.
usr.Put "userPrincipalName", logon 
63.
usr.Put "mail", mail 
64.
usr.Put "wWWHomePage", "http://www.administrator.de" 
65.
 
66.
usr.SetInfo 
67.
WScript.Sleep 5000 
68.
 
69.
Set WshShell = WScript.CreateObject("WScript.Shell") 
70.
Return = WshShell.Run("%COMSPEC% /c Echo j| cacls \\profilserver\profil\" & Name & " /t /c /g domain.local\" & Name & ":F") 
71.
Return = WshShell.Run("%COMSPEC% /c Echo j| cacls \\homeserver\user\" & Name & " /t /c /g domain.local" & Name & ":F") 
72.
 
73.
Return = WshShell.Run("%COMSPEC% /c net user " & Name & " /domain /active") 
74.
Return = WshShell.Run("%COMSPEC% /c net group " & " " & """globale_mastergruppe""" & " " & Name & " /domain /add") 
75.
Set WshShell = Nothing 

Formatierung, Überschriften und Kapitel mach ich später.
Bildschirmausdrucke jedoch von mir niemals.

Gruß

edit:
Zitat von bastla:
Hallo T-Mo!

Die Zeilen 59 und 60 funktionieren wirklich ohne "g " vor dem User?
  • Danke Bastla - eher nein, die hat der Anton Nym unterschlagen face-wink
Noch stilistische Anmerkungen:
  • Ich weiß - da hat der Anton Nym und der Scriptverkürzer in mir seine Spuren hinterlassen - zwischen den einzelnen Befehlsreihen laufen bei mir noch ein paar andere, die aber nur bei mir so benutzt werden und lauffähig sind (da werden u.a Citrix Logins CTI Anbindung und noch viel "schlimmeres" durchgezogen - das vbs Script - das eigentlich auch auch die Steuerbatch laufen würde - hat fast den doppelten Umfang, wie der Stand, den ich hier veröffentlicht habe)

Gruß und dank für deine wie immer wachsamen Augen face-wink
/edit

Mitglied: bastla
bastla schreibt am 26.03.2011 um 11:11:16 Uhr
Hallo T-Mo!

Die Zeilen 59 und 60 funktionieren wirklich ohne "g " vor dem User?

Noch stilistische Anmerkungen:
Zeile 1 (des VBS-Scripts) würde ich (da sie ja ohnehin nicht "Option Explicit" lautet) ersatzlos streichen, und auch hinsichtlich der letzten Zeile hätte ich einen "Alles oder Nichts"-Standpunkt: wenn schon Objekte "zerstören", dann aber nicht nur einzelne (womit Du auch die Zeilen 33 und 58 einsparen könntest) ...

Grüße
bastla
Mitglied: Icedg
Icedg schreibt am 05.05.2011 um 09:24:16 Uhr
Moin, thx für die Anleitung. Wo siehst du das Problem zu "dsadd user" bzw. ich kann jetzt gerade nicht den Vorteil deines Scripts erkennen.

Gruß
ice
Mitglied: Snowman25
Snowman25 schreibt am 10.06.2011 um 15:24:56 Uhr
Zitat von Icedg:
Moin, thx für die Anleitung. Wo siehst du das Problem zu "dsadd user" bzw. ich kann jetzt gerade nicht den Vorteil
deines Scripts erkennen.

U:\>dsadd /? 
Der Befehl "dsadd" ist entweder falsch geschrieben oder 
konnte nicht gefunden werden.
dsadd ist nur auf dem DC verfügbar.
Im Gegensatz dazu kann das Skript von jedem Rechner aus ausgeführt werden.

Gruß
Snow
Mitglied: TimoBeil
TimoBeil schreibt am 05.04.2012 um 17:09:17 Uhr
Salve,

Zitat von Snowman25:
> Zitat von Icedg:
> ----
> Moin, thx für die Anleitung. Wo siehst du das Problem zu "dsadd user" bzw. ich kann jetzt gerade nicht den Vorteil
> deines Scripts erkennen.
  • Das ist doch nur ein Weg/Beispiel, wie man es machen "kann" face-wink
Ich hab es aber nicht geschafft einen User ohne Passwort in einer Domain mit gesetzter Passwortpolicy mit DSADD anzulegen.
Die Policy in die Tonne zu treten - bringt ja nix
Da muß man also Trixxsen und ich trixxse - wenn dann gerne mit graden Wegen.
Das die vbs cmds startet ist ja schon unhybsch genug, aber sowohl set /p, als auch Net user und dsadd - nee nicht mein Steil face-wink

U:\>dsadd /? 
Der Befehl "dsadd" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
dsadd ist nur auf dem DC verfügbar.
Noop - das ist z.B für XP/2003 im Adminpak dabei face-wink

Gruß
Snow

retour
Mitglied: TimoBeil
TimoBeil schreibt am 25.04.2012 um 13:34:14 Uhr
Moin,

wie schrub ich doch da oben?

Zitat von TimoBeil:
denn beim AD User anlegen gilt noch viel mehr, als bei anderen Scripten - ein falsches Zeichen tausend mal nix passiert auf einmal schnöde im Rohr krepiert.

Tja - heute hatte ich bei Maximiliane Musterfrauelein einen Rohrcrétin...
Immer frei nach dem Motto 20 Zentimeterichen sind ganz schön lang..

Daher gibt es jetzt die neuen / zusätzlichen Zeilen 11-22 und Zeile 49 wurde angepasst.
Von daher ist Bastalas (immer noch) berechtiger (und von mir berichtigter) Einwurf wegen
Die Zeilen 59 und 60 funktionieren wirklich ohne "g " vor dem User?
so nicht mehr nachvollziehbar, denn die beziehen sich auf die jetzigen Zeile 70 ff..
mehr ...Ähnliche Beiträge