Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

AD Script - Wo könnte man noch verbessern?

Frage Entwicklung Batch & Shell

Mitglied: gabeBU

gabeBU (Level 1) - Jetzt verbinden

11.12.2012, aktualisiert 15:10 Uhr, 3818 Aufrufe

Hallo Zusammen

Ich habe ein AD-Script geschrieben, mit der man Benutzer erstellen, bearbeiten und löschen kann. Da ich beim Scripten noch zu den Anfängern gehöre, hatte ich für dieses Script ein wenig länger. Nun wollte ich euch fragen, wo man noch Verbessern könnte / bzw. wie etwas einfacher funktionieren würde.

Hier ist das Script:

01.
#************************************************************************* AD Script*********************************************************************** 
02.
#Titel: AD-Programm 
03.
#Ersteller: gabeBU 
04.
#Datum: 11.12.2012 
05.
#Mutationsdatum: 11.12.2012 
06.
#Funktion: Erstellen, Bearbeiten und Löschen von AD-Benutzer 
07.
#Version: 1.0 
08.
#************************************************************************* Globale Variabeln***************************** 
09.
#Globale Variable für das Passwortüberprüfen 
10.
$Global:password 
11.
#Globale Variable für das Usernameüberprüfen 
12.
$Global:username 
13.
#Globale Variable für das Überprüfen der OU 
14.
$Global:ouchoose  
15.
#Globale Variable ob "j" oder "n" eingegeben wurde 
16.
$Global:jorn	 
17.
#**************************************************************************Funktionspacket: Benutzer erstellen************ 
18.
#Funktion: Benutzer erstellen 
19.
function createuser 
20.
21.
 	cls 
22.
	clear-variable benutzername -ErrorAction SilentlyContinue 
23.
	clear-variable Klassenauswahl -ErrorAction SilentlyContinue	 
24.
	$benutzername = read-host "Wie heisst der neue Benutzer?" 
25.
	$Global:username = $benutzername 
26.
	userexist ($Global:username) 
27.
	$Global:ouchoose = read-host "Handelt es sich um einen Schueler oder einen Lehrer?" 
28.
	sorl($Global:ouchoose) 
29.
	if ($Global:ouchoose -eq "Schueler") 
30.
31.
		whichclass($Global:Klasse) 
32.
			 
33.
34.
	write-host "Der Benutzer wird erstellt" 
35.
	$global:password = read-host "Passwort eingeben" 
36.
	Passwordcheck($global:password) 
37.
	if ($Global:ouchoose -eq "Schueler") 
38.
39.
		createuserschueler($Global:username) 
40.
41.
	else 
42.
43.
	        createuserlehrer($Global:username) 
44.
45.
	write-host "Der Benutzer wurde erstellt" 
46.
	write-host "Moechten Sie beenden?" 
47.
	norj($Global:beenden) 
48.
49.
#Funktion, ob es sich um einen Schueler oder einen Lehrer handelt 
50.
function sorl ($Global:ouchoose) 
51.
52.
	while ($Global:ouchoose -ne "s" -and $Global:ouchoose -ne "l") 
53.
54.
		  
55.
		 	write-host "Bitte wählen Sie zwischen Schueler oder Lehrer (s/l)" 
56.
 		 	$Global:ouchoose = read-host "Neue Eingabe:"  
57.
58.
 
59.
	 
60.
	if ($Global:ouchoose -eq "l") 
61.
62.
  		$Global:ouchoose = "Lehrer" 
63.
64.
 
65.
	elseif ($Global:ouchoose -eq "s")  
66.
67.
		 $Global:ouchoose = "Schueler" 
68.
	}	 
69.
	 
70.
71.
#Funktion, welche Klasse das gewählt werden soll 
72.
Function whichclass ($Global:Klasse) 
73.
74.
	while ($Global:jorn -ne "j") 
75.
76.
		$Global:Klasse = read-host "Bitte geben Sie Ihre Klasse ein" 
77.
 		dsquery ou domainroot -name $Global:Klasse 
78.
		write-host "Sie diese Klasse gemeint?" 
79.
		norj($Global:jorn) 
80.
	 
81.
82.
83.
 
84.
#Funktion ob der Benutzer bereits existiert 
85.
 
86.
function userexist ($Global:username) 
87.
88.
	while(dsquery user -samid $Global:username) 
89.
90.
		write-host "Der Benutzer existiert schon bereits. Bitte geben Sie einen anderen Benutzernamen ein." 
91.
		$Global:username = read-host "Neuer Benutzername" 
92.
93.
	 
94.
 
95.
96.
#Funktion, um einen Lehrer-Benutzer zu erstellen  (eigentlicher Befehl) 
97.
Function createuserlehrer 
98.
99.
	write-host "ouchoose hat den Wert" $Global:ouchoose  
100.
	New-ADUser $Global:username -Path "ou=$Global:OUchoose, dc=shelltest,dc=lokal" -AccountPassword (ConvertTo-SecureString -AsPlainText $global:password -Force) -Enabled:$true 
101.
102.
#Funktion, um einen Schueler-Benutzer zu erstellen (eigentlicher Befehl) 
103.
Function createuserschueler 
104.
105.
	New-ADUser $Global:username -Path "ou=$Global:Klasse,ou=$Global:OUchoose, dc=shelltest,dc=lokal" -AccountPassword (ConvertTo-SecureString -AsPlainText $global:password -Force) -Enabled:$true 
106.
107.
 
108.
 
109.
#****************************************************************************Funktionspacket: Passwort ändern************* 
110.
#Funktion: Passwort ändern 
111.
function ChangePassword  
112.
{  
113.
	cls 
114.
	 
115.
	do  
116.
117.
		clear-variable auswahl 
118.
		cls 
119.
		$Global:username = read-host "Bitte geben Sie Benutzername ein" -ErrorAction SilentlyContinue 
120.
		write-host "Folgender Benutzer entspricht deiner Suche:" 
121.
		checkuser($Global:username) 
122.
		Write-host "Hast Sie diesen Benutzer gemeint?" 
123.
		norj ($Global:jorn) 
124.
	}while ($Global:jorn -ne "j") 
125.
 
126.
	if ($Global:jorn -eq "j") 
127.
128.
		$global:password = read-host "Bitte geben Sie ein neues Passwort ein" 
129.
		Passwordcheck($global:password) 
130.
131.
	passwordchange($Global:username) 
132.
	write-host "Moechten Sie beenden?" 
133.
	norj($Global:beenden) 
134.
135.
#Funktion: Passwort ändern: eigentlicher Befehl 
136.
Function passwordchange 
137.
138.
Set-ADAccountPassword -identity $Global:username -NewPassword (ConvertTo-SecureString -AsPlainText $global:password -Force) -Reset  
139.
write-host "Das passwort wurde geändert auf" $global:password 
140.
141.
#****************************************************************Funktionspacket: Standartpasswort verwenden************** 
142.
 
143.
#Funktion: Standartpasswort verwenden 
144.
function standartpass  
145.
146.
	cls 
147.
	clear-variable benutzername -ErrorAction SilentlyContinue 
148.
	clear-variable namensauswahl -ErrorAction SilentlyContinue 
149.
	do  
150.
151.
		clear-variable auswahl 
152.
		clear-variable benutzername -ErrorAction SilentlyContinue 
153.
		$passwordstandart = "KBZSG@123" 
154.
		$benutzername = read-host "Bitte geben Sie Benutzername ein" 
155.
		$Global:username = $benutzername 
156.
		write-host "Folgender Benutzer entsprichen Ihrer Suche:" 
157.
		checkuser($Global:username) 
158.
		$namensauswahl = read-host "Haben Sie diesen Benutzer gemeint?" 
159.
 
160.
	}while ($namensauswahl -ne "j") 
161.
	standartpasschange($Globalusername) 
162.
     
163.
	write-host "Moechten Sie beenden?" 
164.
	norj($Global:beenden) 
165.
166.
#Funktion: Standartpasswort verwenden (eigentlicher Befehl) 
167.
function standartpasschange 
168.
169.
	Set-ADAccountPassword -identity $Global:username -NewPassword (ConvertTo-SecureString -AsPlainText $passwordstandart -Force) -Reset 
170.
	 write-host "Das passwort wurde geändert auf" $passwordstandart 
171.
172.
 
173.
 
174.
 
175.
 
176.
 
177.
#**********************************************************************Funktionspacket: Benutzer löschen****************** 
178.
#Funktion: Benutzer löschen 
179.
 function deleteuser 
180.
181.
	cls 
182.
	clear-variable auswahl -ErrorACtion SilentlyContinue 
183.
	clear-variable benutzername -ErrorAction SilentlyContinue  
184.
	 
185.
	do 
186.
187.
        	cls 
188.
		$Global:username  = read-host "Bitte geben Sie Benutzername ein" 
189.
		write-host "Folgender Benutzer entspricht deiner Suche:" 
190.
		checkuser($Global:username) 
191.
		$namenauswahl = read-host "Hast Sie diesen Benutzer gemeint?" 
192.
 
193.
	}while ($namenauswahl -ne "j") 
194.
	userdelete($Global:username) 
195.
	write-host "Moechten Sie beenden?"		 
196.
	norj($Global:beenden) 
197.
198.
#Funktion: Benutzer löschen (eigentliche Funktion) 
199.
function userdelete 
200.
201.
	write-host "Der Benutzer wird gelöscht" 
202.
	Remove-ADUser -Identity $Global:username -confirm:$false 
203.
	write-host "Der Benutzer" $Global:username "wurde erfolgreich gelöscht" 
204.
205.
#***************************************************************************Scritpübergreifende Funktionen**************** 
206.
#Menüfunktion 
207.
function menue 
208.
209.
 cls 
210.
 write-host "Willkommen zum AD-Script `n" 
211.
    write-host "1: Benutzer erfassen `n" 
212.
    write-host "2: Passwort ändern `n" 
213.
    write-host "3: Standartpassword verwenden `n" 
214.
    write-host "4: Benutzer löschen `n" 
215.
    write-host "5: Beenden `n" 
216.
    $Global:auswahl = read-host "Welcher Menuepunkt moechten Sie gerne ?" 
217.
    checkmenuepoint ($Global:Auswahl) 
218.
219.
#Funktion, die überprüft, dass nur "n" oder "j" eingegeben wird. 
220.
function norj ($Global:jorn) 
221.
222.
 
223.
	$Global:jorn = read-host "(j/n)?" 
224.
 
225.
 
226.
	while (($Global:jorn -ne "j") -and ($Global:jorn -ne "n")) 
227.
228.
 		write-host "Sie haben nicht j oder n eingegeben. Bitte geben Sie j oder n ein." 
229.
 		$Global:jorn = read-host "Eingabe 2" 
230.
231.
 
232.
233.
 
234.
#Funktion: Passwort übeprüfen 
235.
function PasswordCheck ($global:password)  
236.
237.
 
238.
	$adsi = [adsi]'' 
239.
 
240.
	$Global:pwdPropertiesCheck = 0 
241.
	$Global:i = 0 
242.
 
243.
	$minPwdLength = $($adsi.minPwdLength) 
244.
	$pwdProperties = $($adsi.pwdProperties) 
245.
	switch -regex ($global:password) 
246.
247.
		"[A-Z]" { $Global:pwdPropertiesCheck += 1} 
248.
		"[a-z]" { $Global:pwdPropertiesCheck += 1} 
249.
		"[0-9]" { $Global:pwdPropertiesCheck += 1} 
250.
		"\W" 	{ $Global:pwdPropertiesCheck += 1} 
251.
252.
	clear-variable minPwdLength 
253.
	$minPwdLength = 7 
254.
	If ($minPwdLength -gt $global:password.length) 
255.
256.
		$prompt = "Das Passwort muss mindestens $minPwdLength Zeichen lang sein. Bitte versuchen Sie es erneut " 
257.
		$Response = write-host $prompt 
258.
259.
	ElseIf ($Global:pwdPropertiesCheck -lt 3) 
260.
261.
		$prompt = "Das Passwort ist nicht komplex genug.Bitte versuchen Sie es erneut" 
262.
		$Response = write-host $prompt 
263.
264.
	Else 
265.
266.
		$Prompt = "Passwort wird verwendet..." 
267.
		$Response = write-host $Prompt 
268.
		$Global:i++ 
269.
270.
 
271.
	If($Global:i -ne 1) 
272.
273.
		$Prompt = "Bitte geben Sie ein Passwort ein :" 
274.
		$Global:password = read-host $Prompt 
275.
		if ($Global:Password -eq $Null){exit} 
276.
 
277.
278.
279.
 
280.
#Funktion, ob der Benutzer existiert und gelöscht werden kann. 
281.
function checkuser ($Global:username) 
282.
283.
	 
284.
	if (dsquery user -samid $Global:username) 
285.
286.
		dsquery user -samid $Global:username  
287.
		 
288.
289.
	 
290.
	else  
291.
292.
 		while ((dsquery user -samid $Global:username) -eq $Null) 
293.
294.
			write-host "Leider konnte kein Benutzer gefunden werden." 
295.
			$Global:username = read-host "Bitte versuchen Sie es erneut" 
296.
			dsquery user -samid $Global:username 
297.
298.
299.
300.
#Funktion, ob der Benutzer eine richtige Auswahl getroffen hat 
301.
function checkmenuepoint 
302.
303.
	while ($auswahl -lt 1 -or $auswahl -gt 5) 
304.
305.
	   
306.
	 	write-host "Sie haben eine Falsche Zahl eingegeben. Bitte geben Sie einen richtigen Menuepunkt an." 
307.
	 	$Global:auswahl = read-host "Welchen Menuepunkt moechten Sie gerne?" 
308.
	   
309.
310.
311.
#****************************************************************************Active-Directory Modul*********************** 
312.
 
313.
#Active-Directory Modul einsetzen, wenn es nicht schon eingesetzt ist. 
314.
 
315.
Import-Module ActiveDirectory  
316.
#****************************************************************************Eigentliches Script************************* 
317.
#While Schleife, falls man mehrere Eintraege machen moechte" 
318.
$Global:jorn = $Benutzerauswahl 
319.
clear-variable $Benutzerauswahl 
320.
while ($Global:jorn -ne "j") 
321.
322.
    cls	 
323.
    #Menueauswahl 
324.
    menue ($Global:Auswahl) 
325.
     
326.
 
327.
#Switch für die definierung des Menuepunktes 
328.
    switch ($Global:auswahl) 
329.
330.
        "1" 
331.
332.
	  createuser($Global:benutzername)	 
333.
334.
        "2" 
335.
336.
	  changepassword($Global:username) 
337.
338.
 
339.
        "3" 
340.
341.
	   Standartpass($Global:username) 
342.
          
343.
344.
        "4" 
345.
346.
            deleteuser($Global:username)	 
347.
	}	 
348.
			 
349.
	"5" 
350.
351.
	cls 
352.
	write-host "Moechten Sie beenden?" 
353.
	 norj($Global:beenden) 
354.
355.
        	 
356.
	 
357.
	 
358.
	 
359.
	 
360.
361.
 
362.
363.
#*************************************************************************************************************************
Vielleciht könntet ihr mir hier und dort ein paar Verbesserungsvorschläge bringen.

Gruss

gabeBU
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell Script zum verschachteln von AD Gruppen Domain Übergreifend (1)

Frage von Lukas4580 zum Thema Batch & Shell ...

Windows Server
Windows Server 2012 R2 Benutzerkonto für Zugriff auf AD Benutzer (1)

Frage von JulianOhm zum Thema Windows Server ...

Batch & Shell
gelöst PowerShell Script Move-Item nach x Tagen (5)

Frage von lupolo zum Thema Batch & Shell ...

Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...