# Script Name: password-reminder.v1.ps1 # Beschreibung: Schickt dem Nutzer eine Kennwortablauferinnerung # Aufruf: - # Autor: Patrick Asmus # Web: https://www.media-techport.de # Git-Reposit.: https://git.media-techport.de/scriptos/private-script-collection.git # Version: 2.1 # Datum: 21.10.2023 # Modifikation: logo verschoben ##################################################### # Active Directory Passwort Policy: $MaxPasswordAge = 365 # Max Password age in days $WarningLevel = 14 # Warn Users XX Days before Password expires # Mail Settings: $SMTPServer = "smtp.media-techport.int" $FromName = "Media-Techport.DE | Account Service" $FromEmail = "noreply@media-techport.de" $Subject = "Wichtige Mitteilung - Dein Kennwort läuft bald ab" # Funktion zur expliziten Zeichencodierung function Encode-StringToUTF8 ($inputString) { $utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($inputString) return [System.Text.Encoding]::UTF8.GetString($utf8Bytes) } # Funktion zum Erstellen des E-Mail-Texts (Mailbody) function New-MailBody ($GivenName, $Surname, $DaysBeforePasswordchange, $PasswordExpireDate, $PasswordLastSet) { $Mailbody = @"

Logo-Schwarz

Hallo $($GivenName),


Ich möchte dich darüber informieren, dass dein aktuelles Kennwort in Kürze abläuft.

Die Sicherheit deiner Daten ist mir ein wichtiges Anliegen und das regelmäßige Aktualisieren deines Kennworts ist ein wesentlicher Schutzmechanismus.


Dein Account ist mit folgenden Services verknüpft:

- Subsonic Media Streamer
- NextCloud
- Wing FTP-Server


Bitte beachte folgende Informationen zu deinem Account:

- Dein Kennwort läuft am $($PasswordExpireDate) ab.
- Gemäß meiner Sicherheitsrichtlinien müssen Kennwörter alle 365 Tage geändert werden.
- Dein Kennwort wurde zuletzt am $($PasswordLastSet) aktualisiert.
- Wenn du dein Kennwort nicht änderst, wird es in 14 Tagen ablaufen und dein Benutzer deaktiviert.
- Wenn dein Account einmal deaktiviert ist, kannst du diesen nur noch über mich wieder aktivieren.

Du kannst dein Kennwort hier ändern.


Bitte beachte meine Kennwortrichtlinien:

Das Kennwort darf nicht den Kontonamen des Benutzers oder mehr als zwei Zeichen enthalten, die nacheinander im vollständigen Namen des Benutzers vorkommen.
Das Kennwort muss mindestens acht Zeichen lang sein.
Das Kennwort muss Zeichen aus drei der folgenden Kategorien enthalten:
Großbuchstaben (A bis Z)
Kleinbuchstaben (a bis z)
Zahlen zur Basis 10 (0 bis 9)
Nicht alphabetische Zeichen (zum Beispiel !, $, #, %)
Die Komplexitätsvoraussetzungen werden erzwungen, wenn Kennwörter geändert oder erstellt werden.

Bitte antworte nicht auf diese E-Mail.
Wenn du Unterstützung benötigst oder Fragen hast, zögere nicht dich über mein Helpdesk oder per Mail an mich zu wenden.


Freundliche Grüße
Patrick Asmus
___________________________
www.media-techport.de 

Mobil: +49 (0) 1573 / 90 57 0353
E-Mail: support@media-techport.de

"@ $MailbodyPath = "C:\temp\mailbody.html" $Mailbody | Out-File -FilePath $MailbodyPath -Encoding UTF8 return $MailbodyPath } # 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.ToString("dd.MM.yyyy");PasswordLastSet=$PasswordLastSet.ToString("dd.MM.yyyy")} } } # 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 $PasswordLastSet = $ADUser.PasswordLastSet $BodyPath = New-MailBody $GivenName $Surname $DaysBeforePasswordchange $PasswordExpireDate $PasswordLastSet # 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 (Get-Content $BodyPath | Out-String) -BodyAsHtml -Subject $Subject -Encoding ([System.Text.Encoding]::UTF8) -Priority High }