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:
Vielleciht könntet ihr mir hier und dort ein paar Verbesserungsvorschläge bringen.
Gruss
gabeBU
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 195692
Url: https://administrator.de/forum/ad-script-wo-koennte-man-noch-verbessern-195692.html
Ausgedruckt am: 04.04.2025 um 00:04 Uhr