diff --git a/Hermes/Funktionen/creatpw.ps1 b/Hermes/Funktionen/creatpw.ps1 index 89a02a9..69678c5 100644 --- a/Hermes/Funktionen/creatpw.ps1 +++ b/Hermes/Funktionen/creatpw.ps1 @@ -1,39 +1,74 @@ +<# +.SYNOPSIS + Erstellt ein Passwort für einen Active Directory-Benutzer basierend auf Vor- und Nachname. + +.DESCRIPTION + Die Funktion generiert ein zufälliges Passwort im Format "##**##". + Der Code besteht aus: + - Erster Buchstabe des Vornamens (groß) + letzter Buchstabe des Vornamens (klein) + - Erster Buchstabe des Nachnamens (groß) + letzter Buchstabe des Nachnamens (klein) + - Länge des Vornamens (maximal 9) + - Länge des Nachnamens (maximal 9) + Umlaute und Sonderzeichen werden ersetzt. + +.PARAMETER Vorname + Der Vorname des Benutzers + +.PARAMETER Nachname + Der Nachname des Benutzers + +.PARAMETER user + Der SamAccountName des Active Directory-Benutzers + +.PARAMETER ChangePasswordAtLogon + Gibt an, ob das Passwort bei der nächsten Anmeldung geändert werden muss ($true/$false) + +.EXAMPLE + creatpw -Vorname "Müller" -Nachname "Becker" -user "mbecker" -ChangePasswordAtLogon $true +#> + function creatpw { - param( - [string]$Vorname, - [string]$Nachname, - [string]$user, - [bool]$ChangePasswordAtLogon - ) + param( + [string]$Vorname, + [string]$Nachname, + [string]$user, + [bool]$ChangePasswordAtLogon + ) - # Umlaute ersetzen - $Vorname = $Vorname.Replace('ö','oe').Replace('ä','ae').Replace('ü','ue').Replace('ß','ss').Replace('Ö','Oe').Replace('Ü','Ue').Replace('Ä','Ae') - $Nachname = $Nachname.Replace('ö','oe').Replace('ä','ae').Replace('ü','ue').Replace('ß','ss').Replace('Ö','Oe').Replace('Ü','Ue').Replace('Ä','Ae') + # Umlaute und Sonderzeichen ersetzen + $Vorname = $Vorname.Replace('ö', 'oe').Replace('ä', 'ae').Replace('ü', 'ue').Replace('ß', 'ss').Replace('Ö', 'Oe').Replace('Ü', 'Ue').Replace('Ä', 'Ae') + $Nachname = $Nachname.Replace('ö', 'oe').Replace('ä', 'ae').Replace('ü', 'ue').Replace('ß', 'ss').Replace('Ö', 'Oe').Replace('Ü', 'Ue').Replace('Ä', 'Ae') - # Groß-/Kleinschreibung - $Vorname = $Vorname.ToUpper() - $Nachname = $Nachname.ToUpper() - $VornameK = $Vorname.ToLower() - $NachnameK = $Nachname.ToLower() + # Namen in Großbuchstaben konvertieren + $Vorname = $Vorname.ToUpper() + $Nachname = $Nachname.ToUpper() - # Code-Zeichen - $CodeVorname = $Vorname[0] + $VornameK[-1] - $CodeNachname = $Nachname[0] + $NachnameK[-1] + # Kleinbuchstaben-Versionen für Codegenerierung + $VornameK = $Vorname.ToLower() + $NachnameK = $Nachname.ToLower() - # Länge begrenzen - $Vornameanzahl = $Vorname.Length - $Nachnameanzahl = $Nachname.Length - if ($Vornameanzahl -ge 9) { $Vornameanzahl = 9 } - if ($Nachnameanzahl -ge 9) { $Nachnameanzahl = 9 } + # Code generieren: erster Buchstabe groß, letzter Buchstabe klein + $CodeVorname = $Vorname[0] + $VornameK[-1] + $CodeNachname = $Nachname[0] + $NachnameK[-1] - # Passwort zusammenstellen - $Codename = "##*" + $CodeVorname + $CodeNachname + $Vornameanzahl + $Nachnameanzahl + "*##" + # Namenslänge bestimmen und auf maximal 9 Zeichen begrenzen + $Vornameanzahl = $Vorname.Length + $Nachnameanzahl = $Nachname.Length - # Passwort setzen und Account aktivieren - Set-ADAccountPassword -Identity $user -NewPassword (ConvertTo-SecureString -AsPlainText $Codename -Force) -Reset - Enable-ADAccount -Identity $user - Set-ADUser -Identity $user -ChangePasswordAtLogon:$ChangePasswordAtLogon + if ($Vornameanzahl -ge 9) { $Vornameanzahl = 9 } + if ($Nachnameanzahl -ge 9) { $Nachnameanzahl = 9 } - Write-Host "$user - $Vorname - $Nachname : $Codename ( Kennwort ist im Zwischenspeicher. )" - Set-Clipboard $Codename -} \ No newline at end of file + # Finale Passwort-Zusammensetzung + $Codename = "##*" + $CodeVorname + $CodeNachname + $Vornameanzahl + $Nachnameanzahl + "*##" + + # Passwort im Active Directory setzen und Benutzer aktivieren + Set-ADAccountPassword -Identity $user -NewPassword (ConvertTo-SecureString -AsPlainText $Codename -Force) -Reset + Enable-ADAccount -Identity $user + + # Festlegen, ob das Passwort bei der nächsten Anmeldung geändert werden muss + Set-ADUser -Identity $user -ChangePasswordAtLogon:$ChangePasswordAtLogon + + # Ausgabe des generierten Passworts und Kopieren in die Zwischenablage + Write-Host "$user - $Vorname - $Nachname : $Codename ( Kennwort ist im Zwischenspeicher. )" + Set-Clipboard $Codename +}