Format and add comments to creatpw.ps1 function

This commit is contained in:
buiaca 2026-08-03 06:49:52 +02:00
parent baa75515c1
commit 768868b955

View File

@ -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 "##*<Code>*##".
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 { function creatpw {
param( param(
[string]$Vorname, [string]$Vorname,
[string]$Nachname, [string]$Nachname,
[string]$user, [string]$user,
[bool]$ChangePasswordAtLogon [bool]$ChangePasswordAtLogon
) )
# Umlaute ersetzen # Umlaute und Sonderzeichen ersetzen
$Vorname = $Vorname.Replace('ö','oe').Replace('ä','ae').Replace('ü','ue').Replace('ß','ss').Replace('Ö','Oe').Replace('Ü','Ue').Replace('Ä','Ae') $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') $Nachname = $Nachname.Replace('ö', 'oe').Replace('ä', 'ae').Replace('ü', 'ue').Replace('ß', 'ss').Replace('Ö', 'Oe').Replace('Ü', 'Ue').Replace('Ä', 'Ae')
# Groß-/Kleinschreibung # Namen in Großbuchstaben konvertieren
$Vorname = $Vorname.ToUpper() $Vorname = $Vorname.ToUpper()
$Nachname = $Nachname.ToUpper() $Nachname = $Nachname.ToUpper()
$VornameK = $Vorname.ToLower()
$NachnameK = $Nachname.ToLower()
# Code-Zeichen # Kleinbuchstaben-Versionen für Codegenerierung
$CodeVorname = $Vorname[0] + $VornameK[-1] $VornameK = $Vorname.ToLower()
$CodeNachname = $Nachname[0] + $NachnameK[-1] $NachnameK = $Nachname.ToLower()
# Länge begrenzen # Code generieren: erster Buchstabe groß, letzter Buchstabe klein
$Vornameanzahl = $Vorname.Length $CodeVorname = $Vorname[0] + $VornameK[-1]
$Nachnameanzahl = $Nachname.Length $CodeNachname = $Nachname[0] + $NachnameK[-1]
if ($Vornameanzahl -ge 9) { $Vornameanzahl = 9 }
if ($Nachnameanzahl -ge 9) { $Nachnameanzahl = 9 }
# Passwort zusammenstellen # Namenslänge bestimmen und auf maximal 9 Zeichen begrenzen
$Codename = "##*" + $CodeVorname + $CodeNachname + $Vornameanzahl + $Nachnameanzahl + "*##" $Vornameanzahl = $Vorname.Length
$Nachnameanzahl = $Nachname.Length
# Passwort setzen und Account aktivieren if ($Vornameanzahl -ge 9) { $Vornameanzahl = 9 }
Set-ADAccountPassword -Identity $user -NewPassword (ConvertTo-SecureString -AsPlainText $Codename -Force) -Reset if ($Nachnameanzahl -ge 9) { $Nachnameanzahl = 9 }
Enable-ADAccount -Identity $user
Set-ADUser -Identity $user -ChangePasswordAtLogon:$ChangePasswordAtLogon
Write-Host "$user - $Vorname - $Nachname : $Codename ( Kennwort ist im Zwischenspeicher. )" # Finale Passwort-Zusammensetzung
Set-Clipboard $Codename $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
}