Kennwort läuft ab Mail verschicken mit PowerShell
In manchen ActiveDirectory Umgebungen ist es notwendig, dass Benutzer eine Mail erhalten, wenn ihr Passwort / Kennwort bald abläuft, da die Windows Benachrichtigungen nicht funktionieren. Wie man solche eine Kennwort läuft ab Mail versenden kann, mit einem einfachen PowerShell Script, seht ihr hier bei uns. 🙂
Die Kennwort läuft ab Mail versenden
Da Benutzer nicht immer an Ihren Windows-Computer angemeldet sind, sondern in Web-Portalen, so kann es vorkommen, dass das Windows-Kennwort nicht früh genug geändert wird und somit kein Login mehr möglich ist. Abhilfe schafft hier ein PS-Script. Dies ist sehr simpel mit einem kleinen Powershell Script umzusetzen:
(passwordnotificationmail.ps1 – Powershell)
################################################################################################################# # Requires: Windows PowerShell Module for Active Directory ################################################################################################################## # Please Configure $smtpServer="0.0.0.0." #IP mail server $expireindays = 7 #days before reminding $from = "Support <[email protected]>" $logging = "Enabled" # Set to Disabled to Disable Logging $logFile = "C:\mail.csv" # ie. c:\mylog.csv $testing = "Enabled" # Set to Disabled to Email Users $testRecipient = "[email protected]" # If Testing Is Enabled - Email Administrator ONLY # ################################################################################################################### # Check Logging Settings if (($logging) -eq "Enabled") { # Test Log File Path $logfilePath = (Test-Path $logFile) if (($logFilePath) -ne "True") { # Create CSV File and Headers New-Item $logfile -ItemType File Add-Content $logfile "Date,Name,EmailAddress,DaystoExpire,ExpiresOn,Notified" } } # End Logging Check # System Settings $textEncoding = [System.Text.Encoding]::UTF8 $date = Get-Date -format ddMMyyyy # End System Settings # Get Users From AD who are Enabled, Passwords Expire and are Not Currently Expired Import-Module ActiveDirectory $users = get-aduser -filter * -properties Name, PasswordNeverExpires, PasswordExpired, PasswordLastSet, EmailAddress |where {$_.Enabled -eq "True"} | where { $_.PasswordNeverExpires -eq $false } | where { $_.passwordexpired -eq $false } $DefaultmaxPasswordAge = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge # Process Each User for Password Expiry foreach ($user in $users) { $Name = $user.Name $emailaddress = $user.emailaddress $passwordSetDate = $user.PasswordLastSet $PasswordPol = (Get-AduserResultantPasswordPolicy $user) $sent = "" # Reset Sent Flag # Check for Fine Grained Password if (($PasswordPol) -ne $null) { $maxPasswordAge = ($PasswordPol).MaxPasswordAge } else { # No FGP set to Domain Default $maxPasswordAge = $DefaultmaxPasswordAge } $expireson = $passwordsetdate + $maxPasswordAge $today = (get-date) $daystoexpire = (New-TimeSpan -Start $today -End $Expireson).Days # Set Greeting based on Number of Days to Expiry. # Check Number of Days to Expiry $messageDays = $daystoexpire if (($messageDays) -gt "1") { $messageDays = "in " + "$daystoexpire" + " Tagen" } else { $messageDays = "HEUTE" } # Email Subject Set Here $subject="Ihr Kennwort läuft $messageDays ab." # Email Body Set Here, Note You can use HTML, including Images. $body =" <p style=""font-family:'Segoe UI', Segoe UI;""> Hallo $name, <br><br> Ihr Windows-Kennwort wird $messageDays ablaufen.<br> Um Ihr Kennwort zu ändern, drücken Sie STRG-ALT-ENTF und wählen Sie 'Kennwort ändern'.<br><br> Dein Support Team.<br> (Bitte antworten Sie NICHT auf diese Email. Bei Fragen wenden Sie sich per Mail an <a href=""mailto:[email protected]"">[email protected]</a>) </P>" # If Testing Is Enabled - Email only Administrator if (($testing) -eq "Enabled") { $emailaddress = $testRecipient } # End Testing # If a user has no email address listed if (($emailaddress) -eq $null) { $emailaddress = $testRecipient }# End No Valid Email # Send Email Message if (($daystoexpire -ge "0") -and ($daystoexpire -lt $expireindays)) { $sent = "Yes" # If Logging is Enabled Log Details if (($logging) -eq "Enabled") { Add-Content $logfile "$date,$Name,$emailaddress,$daystoExpire,$expireson,$sent" } # Send Email Message Send-Mailmessage -smtpServer $smtpServer -from $from -to $emailaddress -subject $subject -body $body -bodyasHTML -priority High -Encoding $textEncoding } # End Send Message else # Log Non Expiring Password { $sent = "No" # If Logging is Enabled Log Details if (($logging) -eq "Enabled") { Add-Content $logfile "$date,$Name,$emailaddress,$daystoExpire,$expireson,$sent" } } } # End User Processing # End
Folgende Zeilen müssen im Script angepasst werden, um die Mail zum Kennwort korrekt zu senden:
- Zeile 4 – 12: Grundkonfiguration zum Mail – Server und Funktion
- Zeile 76 – 86: Content / Text der E-Mail
Tipp
Diese Kennwort läuft ab Mail sollte dann nur noch 1x täglich per Aufgabenplanung ausgeführt werden. Wenn das Script nur wöchentlich ausgeführt wird, nützt es natürlich nichts 😉