gabebu
Goto Top

AD Script - Wo könnte man noch verbessern?

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:

#************************************************************************* AD Script***********************************************************************
#Titel: AD-Programm
#Ersteller: gabeBU
#Datum: 11.12.2012
#Mutationsdatum: 11.12.2012
#Funktion: Erstellen, Bearbeiten und Löschen von AD-Benutzer
#Version: 1.0
#************************************************************************* Globale Variabeln*****************************
#Globale Variable für das Passwortüberprüfen
$Global:password
#Globale Variable für das Usernameüberprüfen
$Global:username
#Globale Variable für das Überprüfen der OU
$Global:ouchoose 
#Globale Variable ob "j" oder "n" eingegeben wurde 
$Global:jorn	
#**************************************************************************Funktionspacket: Benutzer erstellen************
#Funktion: Benutzer erstellen
function createuser
{
 	cls
	clear-variable benutzername -ErrorAction SilentlyContinue
	clear-variable Klassenauswahl -ErrorAction SilentlyContinue	
	$benutzername = read-host "Wie heisst der neue Benutzer?"  
	$Global:username = $benutzername
	userexist ($Global:username)
	$Global:ouchoose = read-host "Handelt es sich um einen Schueler oder einen Lehrer?"  
	sorl($Global:ouchoose)
	if ($Global:ouchoose -eq "Schueler")  
	{
		whichclass($Global:Klasse)
			
	}
	write-host "Der Benutzer wird erstellt"  
	$global:password = read-host "Passwort eingeben"  
	Passwordcheck($global:password)
	if ($Global:ouchoose -eq "Schueler")  
	{
		createuserschueler($Global:username)
	}
	else
	{
	        createuserlehrer($Global:username)
	}
	write-host "Der Benutzer wurde erstellt"  
	write-host "Moechten Sie beenden?"  
	norj($Global:beenden)
}
#Funktion, ob es sich um einen Schueler oder einen Lehrer handelt
function sorl ($Global:ouchoose)
{
	while ($Global:ouchoose -ne "s" -and $Global:ouchoose -ne "l")  
 	{
		 
		 	write-host "Bitte wählen Sie zwischen Schueler oder Lehrer (s/l)"  
 		 	$Global:ouchoose = read-host "Neue Eingabe:"   
 	}

	
	if ($Global:ouchoose -eq "l")  
	{
  		$Global:ouchoose = "Lehrer"  
	}

	elseif ($Global:ouchoose -eq "s")   
	{
		 $Global:ouchoose = "Schueler"  
	}	
	
}
#Funktion, welche Klasse das gewählt werden soll
Function whichclass ($Global:Klasse)
{
	while ($Global:jorn -ne "j")  
	{
		$Global:Klasse = read-host "Bitte geben Sie Ihre Klasse ein"  
 		dsquery ou domainroot -name $Global:Klasse
		write-host "Sie diese Klasse gemeint?"  
		norj($Global:jorn)
	
	}
}

#Funktion ob der Benutzer bereits existiert

function userexist ($Global:username)
{
	while(dsquery user -samid $Global:username)
	{
		write-host "Der Benutzer existiert schon bereits. Bitte geben Sie einen anderen Benutzernamen ein."  
		$Global:username = read-host "Neuer Benutzername"  
	}
	

}
#Funktion, um einen Lehrer-Benutzer zu erstellen  (eigentlicher Befehl)
Function createuserlehrer
{
	write-host "ouchoose hat den Wert" $Global:ouchoose   
	New-ADUser $Global:username -Path "ou=$Global:OUchoose, dc=shelltest,dc=lokal" -AccountPassword (ConvertTo-SecureString -AsPlainText $global:password -Force) -Enabled:$true  
}
#Funktion, um einen Schueler-Benutzer zu erstellen (eigentlicher Befehl)
Function createuserschueler
{
	New-ADUser $Global:username -Path "ou=$Global:Klasse,ou=$Global:OUchoose, dc=shelltest,dc=lokal" -AccountPassword (ConvertTo-SecureString -AsPlainText $global:password -Force) -Enabled:$true  
}


#****************************************************************************Funktionspacket: Passwort ändern*************
#Funktion: Passwort ändern
function ChangePassword 
{ 
	cls
	
	do 
	{
		clear-variable auswahl
		cls
		$Global:username = read-host "Bitte geben Sie Benutzername ein" -ErrorAction SilentlyContinue  
		write-host "Folgender Benutzer entspricht deiner Suche:"  
		checkuser($Global:username)
		Write-host "Hast Sie diesen Benutzer gemeint?"  
		norj ($Global:jorn)
	}while ($Global:jorn -ne "j")  

	if ($Global:jorn -eq "j")  
	{
		$global:password = read-host "Bitte geben Sie ein neues Passwort ein"  
		Passwordcheck($global:password)
	}
	passwordchange($Global:username)
	write-host "Moechten Sie beenden?"  
	norj($Global:beenden)
}
#Funktion: Passwort ändern: eigentlicher Befehl
Function passwordchange
{
Set-ADAccountPassword -identity $Global:username -NewPassword (ConvertTo-SecureString -AsPlainText $global:password -Force) -Reset 
write-host "Das passwort wurde geändert auf" $global:password  
}
#****************************************************************Funktionspacket: Standartpasswort verwenden**************

#Funktion: Standartpasswort verwenden
function standartpass 
{
	cls
	clear-variable benutzername -ErrorAction SilentlyContinue
	clear-variable namensauswahl -ErrorAction SilentlyContinue
	do 
        {
		clear-variable auswahl
		clear-variable benutzername -ErrorAction SilentlyContinue
		$passwordstandart = "KBZSG@123"  
		$benutzername = read-host "Bitte geben Sie Benutzername ein"  
		$Global:username = $benutzername
		write-host "Folgender Benutzer entsprichen Ihrer Suche:"  
		checkuser($Global:username)
		$namensauswahl = read-host "Haben Sie diesen Benutzer gemeint?"  

	}while ($namensauswahl -ne "j")  
	standartpasschange($Globalusername)
    
	write-host "Moechten Sie beenden?"  
	norj($Global:beenden)
}
#Funktion: Standartpasswort verwenden (eigentlicher Befehl)
function standartpasschange
{
	Set-ADAccountPassword -identity $Global:username -NewPassword (ConvertTo-SecureString -AsPlainText $passwordstandart -Force) -Reset
	 write-host "Das passwort wurde geändert auf" $passwordstandart  
}





#**********************************************************************Funktionspacket: Benutzer löschen******************
#Funktion: Benutzer löschen
 function deleteuser
{
	cls
	clear-variable auswahl -ErrorACtion SilentlyContinue
	clear-variable benutzername -ErrorAction SilentlyContinue 
	
	do
	{
        	cls
		$Global:username  = read-host "Bitte geben Sie Benutzername ein"  
		write-host "Folgender Benutzer entspricht deiner Suche:"  
		checkuser($Global:username)
		$namenauswahl = read-host "Hast Sie diesen Benutzer gemeint?"  

	}while ($namenauswahl -ne "j")  
	userdelete($Global:username)
	write-host "Moechten Sie beenden?"		  
	norj($Global:beenden)
}
#Funktion: Benutzer löschen (eigentliche Funktion)
function userdelete
{
	write-host "Der Benutzer wird gelöscht"  
	Remove-ADUser -Identity $Global:username -confirm:$false
	write-host "Der Benutzer" $Global:username "wurde erfolgreich gelöscht"  
}
#***************************************************************************Scritpübergreifende Funktionen****************
#Menüfunktion
function menue
{
 cls
 write-host "Willkommen zum AD-Script `n"  
    write-host "1: Benutzer erfassen `n"  
    write-host "2: Passwort ändern `n"  
    write-host "3: Standartpassword verwenden `n"  
    write-host "4: Benutzer löschen `n"  
    write-host "5: Beenden `n"  
    $Global:auswahl = read-host "Welcher Menuepunkt moechten Sie gerne ?"  
    checkmenuepoint ($Global:Auswahl)
}
#Funktion, die überprüft, dass nur "n" oder "j" eingegeben wird. 
function norj ($Global:jorn)
{

	$Global:jorn = read-host "(j/n)?"  


	while (($Global:jorn -ne "j") -and ($Global:jorn -ne "n"))  
	{
 		write-host "Sie haben nicht j oder n eingegeben. Bitte geben Sie j oder n ein."  
 		$Global:jorn = read-host "Eingabe 2"  
	}

}

#Funktion: Passwort übeprüfen
function PasswordCheck ($global:password) 
{

	$adsi = [adsi]''  

	$Global:pwdPropertiesCheck = 0
	$Global:i = 0

	$minPwdLength = $($adsi.minPwdLength)
	$pwdProperties = $($adsi.pwdProperties)
	switch -regex ($global:password)
	{
		"[A-Z]" { $Global:pwdPropertiesCheck += 1}  
		"[a-z]" { $Global:pwdPropertiesCheck += 1}  
		"[0-9]" { $Global:pwdPropertiesCheck += 1}  
		"\W" 	{ $Global:pwdPropertiesCheck += 1}  
	}
	clear-variable minPwdLength
	$minPwdLength = 7
	If ($minPwdLength -gt $global:password.length)
	{
		$prompt = "Das Passwort muss mindestens $minPwdLength Zeichen lang sein. Bitte versuchen Sie es erneut "  
		$Response = write-host $prompt
	}
	ElseIf ($Global:pwdPropertiesCheck -lt 3)
	{
		$prompt = "Das Passwort ist nicht komplex genug.Bitte versuchen Sie es erneut"  
		$Response = write-host $prompt
	}
	Else
	{
		$Prompt = "Passwort wird verwendet..."  
		$Response = write-host $Prompt
		$Global:i++
	}

	If($Global:i -ne 1)
	{
		$Prompt = "Bitte geben Sie ein Passwort ein :"  
		$Global:password = read-host $Prompt
		if ($Global:Password -eq $Null){exit}

	}
}

#Funktion, ob der Benutzer existiert und gelöscht werden kann.
function checkuser ($Global:username)
{
	
	if (dsquery user -samid $Global:username)
	{
		dsquery user -samid $Global:username 
		
	}
	
	else 
	{
 		while ((dsquery user -samid $Global:username) -eq $Null)
		{
			write-host "Leider konnte kein Benutzer gefunden werden."  
			$Global:username = read-host "Bitte versuchen Sie es erneut"  
			dsquery user -samid $Global:username
		}
	}
}
#Funktion, ob der Benutzer eine richtige Auswahl getroffen hat
function checkmenuepoint
{
	while ($auswahl -lt 1 -or $auswahl -gt 5)
	{
	  
	 	write-host "Sie haben eine Falsche Zahl eingegeben. Bitte geben Sie einen richtigen Menuepunkt an."  
	 	$Global:auswahl = read-host "Welchen Menuepunkt moechten Sie gerne?"  
	  
	}
}
#****************************************************************************Active-Directory Modul***********************

#Active-Directory Modul einsetzen, wenn es nicht schon eingesetzt ist.

Import-Module ActiveDirectory 
#****************************************************************************Eigentliches Script*************************
#While Schleife, falls man mehrere Eintraege machen moechte" 
$Global:jorn = $Benutzerauswahl
clear-variable $Benutzerauswahl
while ($Global:jorn -ne "j")  
{
    cls	
    #Menueauswahl
    menue ($Global:Auswahl)
    

#Switch für die definierung des Menuepunktes
    switch ($Global:auswahl)
    {
        "1"  
        {
	  createuser($Global:benutzername)	
     	}
        "2"  
        {
	  changepassword($Global:username)
        }

        "3"  
        {
	   Standartpass($Global:username)
         
        }
        "4"  
        {
            deleteuser($Global:username)	
	}	
			
	"5"  
	{
	cls
	write-host "Moechten Sie beenden?"  
	 norj($Global:beenden)
	}
        	
	
	
	
	
    }

}
#*************************************************************************************************************************

Vielleciht könntet ihr mir hier und dort ein paar Verbesserungsvorschläge bringen.

Gruss

gabeBU

Content-Key: 195692

Url: https://administrator.de/contentid/195692

Printed on: April 20, 2024 at 01:04 o'clock