diff --git a/.archiv/password-reminder.v1.ps1 b/.archiv/password-reminder.v1.ps1 deleted file mode 100644 index 9a9a674..0000000 --- a/.archiv/password-reminder.v1.ps1 +++ /dev/null @@ -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 = @" - - - - - Hallo $($GivenName) $($Surname), -
- Du erhälst diese E-Mail, da du ein Benutzerkonto auf Media-Techport.DE hast. -
- Dein Passwort bei media-techport.de endet am $($PasswordExpireDate). -
- Du hast $($DaysBeforePasswordchange) Tage Zeit dein Kennwort zu ändern. -
- Wenn du der Passwortänderung nicht nachkommst, wirst du dich bei deinem Administrator melden müssen, damit das Kennwort gesetzt werden kann. -
-
- Freundliche Grüße -
- Media-Techport.DE - -"@ - 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) -} \ No newline at end of file diff --git a/README.md b/README.md index 022b978..fdeed24 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,106 @@ -# AD Kennwortbenachrichtigung +

+ + Techniverse Community + +

-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: +

AD Kennwortablaufbenachrichtigung

-- **$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. +

+ PowerShell-Skript zur automatischen E-Mail-Benachrichtigung bei bevorstehendem Kennwortablauf im Active Directory +

-- **$FromName:** Der Absendername, welcher der Mail mitgegeben wird. +
+ 🏰 Website + · + 📰 Community + · + 🐘 Mastodon + · + 💬 Support +
+

-- **$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. + +

+

+ +

+ +

+ + © Patrick Asmus · Techniverse Network · Lizenz + +

\ No newline at end of file