ad-kennwortbablaufbenachric.../password-reminder.v2.ps1
2023-11-06 19:08:34 +01:00

91 lines
8.7 KiB
PowerShell

# Script Name: password-reminder.v2.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: 06.11.2023
# Modifikation: logo verschoben
#####################################################
# Active Directory Passwort Policy:
$MaxPasswordAge = 365 # maximales Passwortalter in Tagen
$WarningLevel = 14 # Tage vor Ablauf, in denen Benutzer gewarnt werden
# 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 = @"
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" id="u0" href="https://de.rakko.tools/tools/129/lib/tinymce/skins/ui/oxide/content.min.css"><link rel="stylesheet" type="text/css" id="u1" href="https://de.rakko.tools/tools/129/lib/tinymce/skins/content/default/content.min.css"></head><body id="tinymce" class="mce-content-body " data-id="content" contenteditable="false" spellcheck="false" style="background-color: #9FB6CD;">
<p><span style="font-size: 12pt;"><img src="https://assets.media-techport.de/logos/main/LogoSchwarz.png" alt="Logo-Schwarz" width="433" height="132" /></span></p>
<p><span style="font-family: verdana, geneva, sans-serif;"><strong><span style="font-size: 18pt;">Hallo $($GivenName),</span></strong></span></p>
<p><span style="font-family: verdana, geneva, sans-serif;"><br />Ich m&ouml;chte dich dar&uuml;ber informieren, dass dein aktuelles Kennwort in K&uuml;rze abl&auml;uft.</span><br /><span style="font-family: verdana, geneva, sans-serif;">Die Sicherheit deiner Daten ist mir ein wichtiges Anliegen und das regelm&auml;&szlig;ige Aktualisieren deines Kennworts ist ein wesentlicher Schutzmechanismus.<br /><br /><br /></span></p>
<p><strong><span style="font-size: 12pt; font-family: verdana, geneva, sans-serif;">Dein Account ist mit folgenden Services verkn&uuml;pft:</span></strong></p>
<p><span style="font-family: verdana, geneva, sans-serif;">- <a title="https://subsonic.media-techport.de/" href="https://subsonic.media-techport.de/" target="_blank" rel="noopener">Subsonic Media Streamer</a></span><br /><span style="font-family: verdana, geneva, sans-serif;">- <a title="https://cloud.media-techport.de/" href="https://cloud.media-techport.de/" target="_blank" rel="noopener">NextCloud</a></span><br /><span style="font-family: verdana, geneva, sans-serif;">- <a title="https://ftp2.media-techport.de/" href="https://ftp2.media-techport.de/" target="_blank" rel="noopener">Wing FTP-Server</a><br /><br /><br /></span></p>
<p><strong><span style="font-family: verdana, geneva, sans-serif;">Bitte beachte folgende Informationen zu deinem Account:</span></strong></p>
<p><span style="font-family: verdana, geneva, sans-serif;">- Dein Kennwort l&auml;uft am $($PasswordExpireDate) ab.</span><br /><span style="font-family: verdana, geneva, sans-serif;">- Gem&auml;&szlig; meiner Sicherheitsrichtlinien m&uuml;ssen Kennw&ouml;rter alle 365 Tage ge&auml;ndert werden.</span><br /><span style="font-family: verdana, geneva, sans-serif;">- Dein Kennwort wurde zuletzt am $($PasswordLastSet) aktualisiert.<br />- Wenn du dein Kennwort nicht &auml;nderst, wird es in 14 Tagen ablaufen und dein Benutzer deaktiviert.<br />- Wenn dein Account einmal deaktiviert ist, kannst du diesen nur noch &uuml;ber mich wieder aktivieren.</span></p>
<p><span style="font-family: verdana, geneva, sans-serif;">Du kannst dein Kennwort <span style="text-decoration: underline;"><strong><a title="https://adauth.media-techport.de/" href="https://adauth:only-for-authorized@adauth.media-techport.de/" target="_blank" rel="noopener">hier</a></strong></span> &auml;ndern.</span><br /><br /><br /></p>
<p><strong><span style="font-family: verdana, geneva, sans-serif;">Bitte beachte meine Kennwortrichtlinien:</span></strong></p>
<p><span style="font-family: verdana, geneva, sans-serif;">Das Kennwort darf nicht den Kontonamen des Benutzers oder mehr als zwei Zeichen enthalten, die nacheinander im vollst&auml;ndigen Namen des Benutzers vorkommen.</span><br /><span style="font-family: verdana, geneva, sans-serif;">Das Kennwort muss mindestens acht Zeichen lang sein.</span><br /><span style="font-family: verdana, geneva, sans-serif;">Das Kennwort muss Zeichen aus drei der folgenden Kategorien enthalten:</span><br /><span style="font-family: verdana, geneva, sans-serif;">Gro&szlig;buchstaben (A bis Z)</span><br /><span style="font-family: verdana, geneva, sans-serif;">Kleinbuchstaben (a bis z)</span><br /><span style="font-family: verdana, geneva, sans-serif;">Zahlen zur Basis 10 (0 bis 9)</span><br /><span style="font-family: verdana, geneva, sans-serif;">Nicht alphabetische Zeichen (zum Beispiel !, $, #, %)</span><br /><span style="font-family: verdana, geneva, sans-serif;">Die Komplexit&auml;tsvoraussetzungen werden erzwungen, wenn Kennw&ouml;rter ge&auml;ndert oder erstellt werden.</span></p>
<p><span style="font-family: verdana, geneva, sans-serif;">Bitte antworte nicht auf diese E-Mail.<br />Wenn du Unterst&uuml;tzung ben&ouml;tigst oder Fragen hast, z&ouml;gere nicht dich &uuml;ber mein <a title="https://helpdesk.media-techport.de" href="https://helpdesk.media-techport.de">Helpdesk</a> oder per <a title="support@media-techport.de" href="mailto:support@media-techport.de" target="_blank" rel="noopener">Mail</a> an mich zu wenden.<br /><br /><br /></span></p>
<p><span style="font-family: verdana, geneva, sans-serif;">Freundliche Gr&uuml;&szlig;e</span><br /><span style="font-family: verdana, geneva, sans-serif;">Patrick Asmus</span><br /><span style="font-family: verdana, geneva, sans-serif;">___________________________</span><br /><span style="font-family: verdana, geneva, sans-serif;"><a title="www.media-techport.de" href="http://www.media-techport.de" target="_blank" rel="noopener">www.media-techport.de</a>&nbsp;</span></p>
<p><span style="font-family: verdana, geneva, sans-serif;">Mobil: +49 (0) 1573 / 90 57 0353</span><br /><span style="font-family: verdana, geneva, sans-serif;">E-Mail: <a title="support@media-techport.de" href="mailto:support@media-techport.de" target="_blank" rel="noopener">support@media-techport.de</a></span></p>
</body></html>
"@
$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
}