Update Readme + Cleanup

This commit is contained in:
2026-04-21 22:12:15 +02:00
parent 61ace4cde5
commit eb8f66a282
2 changed files with 97 additions and 96 deletions

View File

@@ -1,80 +0,0 @@
# Active Directory Passwort Policy:
$MaxPasswordAge = 365 # Max Password age in days
$WarningLevel = 364 # Warn Users XX Days before Password expires
# Mail Settings:
$SMTPServer = "smtp.media-techport.int"
$FromName = "Media-Techport.DE | Passwort Erinnerung"
$FromEmail = "noreply@media-techport.de"
$Subject = "Dein Passwort muss geändert werden!"
# Funktion zur expliziten Zeichencodierung
function Encode-StringToUTF8 ($inputString) {
$utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($inputString)
return [System.Text.Encoding]::UTF8.GetString($utf8Bytes)
}
# Message Template (Mailbody)
function New-MailBody ($GivenName, $Surname, $DaysBeforePasswordchange, $PasswordExpireDate) {
$Mailbody = @"
<html>
<head>
</head>
<body>
Hallo $($GivenName) $($Surname),
<br>
Du erhälst diese E-Mail, da du ein Benutzerkonto auf Media-Techport.DE hast.
<br>
Dein Passwort bei media-techport.de endet am $($PasswordExpireDate).
<br>
Du hast $($DaysBeforePasswordchange) Tage Zeit dein Kennwort zu ändern.
<br>
Wenn du der Passwortänderung nicht nachkommst, wirst du dich bei deinem Administrator melden müssen, damit das Kennwort gesetzt werden kann.
<br>
<br>
Freundliche Grüße
<br>
Media-Techport.DE
</body>
"@
return Encode-StringToUTF8 $Mailbody
}
# Import all active AD-Users
$AllADUsers = Get-ADUser -Filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties PasswordLastSet, mail
# Calculate expiring passwords and store them in an object
$today = Get-Date
$ExpirePasswordList = @()
foreach ($ADUser in $AllADUsers) {
$GivenName = $ADUser.GivenName
$Surname = $ADUser.Surname
$MailAddress = $ADUser.mail
$PasswordLastSet = $ADUser.PasswordLastSet
$PasswordExpireDate = $PasswordLastSet.AddDays(+$MaxPasswordAge)
$DaysBeforePasswordchange = ($PasswordExpireDate - $today).Days
if ($DaysBeforePasswordchange -le $WarningLevel) {
$ExpirePasswordList += New-Object PSObject -property @{Givenname=$Givenname;Surname=$Surname;MailAddress=$MailAddress;DaysBeforePasswordchange=$DaysBeforePasswordchange;PasswordExpireDate=$PasswordExpireDate}
}
}
# Filter Users with Mailaddresses
$ExpirePasswordList = $ExpirePasswordList | Where-Object {$_.mailaddress}
# Send mail to every user with expired password
foreach ($ADUser in $ExpirePasswordList) {
$GivenName = $ADUser.GivenName
$Surname = $ADUser.Surname
$MailAddress = $ADUser.MailAddress
$DaysBeforePasswordchange = $ADUser.DaysBeforePasswordchange
$PasswordExpireDate = $ADUser.PasswordExpireDate
$Body = New-MailBody $GivenName $Surname $DaysBeforePasswordchange $PasswordExpireDate
# Erstelle den "From" Header mit Sendername und E-Mail-Adresse
$FromHeader = "{0} <{1}>" -f $FromName, $FromEmail
Send-MailMessage -SmtpServer $SMTPServer -To $MailAddress -From $FromHeader -Body $Body -BodyAsHtml -Subject $Subject -Encoding ([System.Text.Encoding]::UTF8)
}

113
README.md
View File

@@ -1,25 +1,106 @@
# AD Kennwortbenachrichtigung
<p align="center">
<a href="https://techniverse.net">
<img src="https://assets.techniverse.net/f1/git/graphics/repo-techniverse-logo.png" alt="Techniverse Community" height="70" />
</a>
</p>
Dieses PowerShell-Skript dient dazu, Kennwortablaufbenachrichtigungen an Benutzer zu senden. Das Skript beruht auf Active Directory-Passwortrichtlinien und sendet E-Mails an Benutzer, deren Kennwörter in Kürze ablaufen. Hier sind die wichtigsten Variablen:
<h1 align="center">AD Kennwortablaufbenachrichtigung</h1>
- **$MaxPasswordAge** Das Skript verwendet die in der Variable $MaxPasswordAge festgelegte Anzahl von Tagen, um das maximale Alter von Kennwörtern festzulegen.
- **$WarningLevel:** Das Skript warnt Benutzer, die sich der Kennwortänderung nähern, indem es die in der Variable $WarningLevel festgelegte Anzahl von Tagen verwendet.
- **$SMTPServer:** Hier wird der SMTP Server eingetragen.
<h4 align="center">
PowerShell-Skript zur automatischen E-Mail-Benachrichtigung bei bevorstehendem Kennwortablauf im Active Directory
</h4>
- **$FromName:** Der Absendername, welcher der Mail mitgegeben wird.
<h6 align="center">
<a href="https://www.cleveradmin.de">🏰 Website</a>
·
<a href="https://techniverse.net">📰 Community</a>
·
<a href="https://social.techniverse.net/@donnerwolke">🐘 Mastodon</a>
·
<a href="https://matrix.to/#/#support:techniverse.net">💬 Support</a>
</h6>
<br><br>
- **$FromEmail:** Dies ist die Absendermailadresse.
Dieses PowerShell-Skript automatisiert die Kennwortablaufbenachrichtigung für Active Directory-Benutzer. Es überwacht kontinuierlich die Kennwortablaufdaten und sendet rechtzeitig E-Mails an Benutzer, deren Kennwörter in Kürze ablaufen.
- **$Subject:** Der Betreff der Mail.
Es durchläuft alle aktiven Active Directory-Benutzer, berechnet das Ablaufdatum ihrer Kennwörter und speichert diejenigen, die sich dem Ablaufdatum nähern, in einer Liste.
## 🎯 Funktionen
Schließlich werden Benachrichtigungs-E-Mails an diese Benutzer gesendet, die sie darüber informieren, dass ihr Kennwort in Kürze abläuft. Die E-Mails enthalten Informationen über den Dienst, für den das Kennwort verwendet wird, das Ablaufdatum des Kennworts und die Anweisungen zum Ändern des Kennworts gemäß den Kennwortrichtlinien.
- 🔍 **Automatische Überwachung**: Ermittelt alle aktiven AD-Benutzer mit ablaufenden Kennwörtern
- 📊 **Intelligente Filterung**: Berücksichtigt nur Benutzer mit gültiger E-Mail-Adresse
- 📧 **HTML-E-Mails**: Versendet formatierte, mehrsprachige E-Mail-Benachrichtigungen
-**Zeitgesteuerte Warnung**: Konfigurierbare Warnfrist (Standard: 14 Tage vor Ablauf)
- 📋 **Detaillierte Informationen**: E-Mails enthalten Ablaufdatum, Services und Kennwortrichtlinien
Die E-Mails werden im HTML-Format erstellt und der Mail Body temporär hier abgelegt: "C:\temp\mailbody.html"
## ⚙️ Konfiguration
**Hinweis:** Das Skript ist spezifisch für die Verwendung in einer bestimmten Umgebung konfiguriert und erfordert möglicherweise Anpassungen, um in anderen Umgebungen ordnungsgemäß zu funktionieren.
Das Skript ist über folgende Variablen konfigurierbar:
Das Script wurde erfolgreich auf einem Windows Server 2016 mit eingerichteten Active Directory getestet.
| Variable | Beschreibung | Standardwert |
|----------|-------------|--------------|
| `$MaxPasswordAge` | Maximales Kennwortalter in Tagen | `365` |
| `$WarningLevel` | Tage vor Ablauf für Warnung | `14` |
| `$SMTPServer` | SMTP-Server für E-Mail-Versand | `smtp.media-techport.int` |
| `$FromName` | Absendername | `Media-Techport.DE \| Account Service` |
| `$FromEmail` | Absender-E-Mail | `noreply@media-techport.de` |
| `$Subject` | E-Mail-Betreff | `Wichtige Mitteilung - Dein Kennwort läuft bald ab` |
## 📋 Voraussetzungen
- Windows Server 2016 oder neuer
- Active Directory-Rollen (RSAT) installiert
- PowerShell 5.1+
- Zugriff auf SMTP-Mailserver
## 🚀 Verwendung
Das Skript wird ohne Parameter ausgeführt:
```powershell
.\password-reminder.v2.ps1
```
## 📧 E-Mail-Inhalt
Die E-Mail enthält:
- Persönliche Ansprache mit Vorname
- Liste der verknüpften Services (Subsonic, NextCloud, FTP)
- Ablaufdatum und letzte Kennwortänderung
- Link zur Kennwortänderung
- Detaillierte Kennwortrichtlinien
- Kontaktinformationen für Support
## 📁 Projektstruktur
```
ad-kennwortbablaufbenachrichtigung/
├── password-reminder.v2.ps1 # Hauptskript
├── README.md # Diese Datei
├── LICENSE # Lizenzinformationen
└── Aufgabenplanung/ # Windows Task Scheduler Konfiguration
└── Kennwortablaufbenachrichtigung-für-alle.xml
```
## ⚠️ Hinweis
Das Skript ist für eine spezifische Umgebung konfiguriert. Für andere Umgebungen müssen die Konfigurationsvariablen angepasst werden.
## 🐛 Bekannte Einschränkungen
**Aktuelles Problem:** Bei jeder Ausführung des Skripts werden E-Mails an alle betroffenen Benutzer versendet, auch wenn bereits eine Benachrichtigung gesendet wurde. Dies führt zu mehreren E-Mails an dieselben Benutzer.
**Lösung in Planung:** In Zukunft wird das Skript einen Status speichern (z. B. in einer Log-Datei oder Datenbank), um doppelte E-Mail-Versand zu verhindern.
## ✅ Teststatus
Das Script wurde erfolgreich auf einem Windows Server 2016 mit Active Directory getestet.
<br><br>
<p align="center">
<img src="https://assets.techniverse.net/f1/git/graphics/gray0-catonline.svg" alt="">
</p>
<p align="center">
<sub>
© Patrick Asmus · Techniverse Network · <a href="./LICENSE">Lizenz</a>
</sub>
</p>