#Import AD Module Import-Module ActiveDirectory #Create warning dates for future password expiration $SevenDayWarnDate = (get-date).adddays(7).ToLongDateString() $ThreeDayWarnDate = (get-date).adddays(3).ToLongDateString() $OneDayWarnDate = (get-date).adddays(1).ToLongDateString() #Email Variables $MailSender = " Password AutoBot &lt;password-alerter@itforce.com&gt;" $Subject = 'FYI - Your account password will expire soon' $EmailStub1 = 'I am a bot and performed this action automatically. I am here to inform you that the password for' $EmailStub2 = 'will expire in' $EmailStub3 = 'days on' $EmailStub4 = '. Please contact the helpdesk if you need assistance changing your password. DO NOT  <span><a href="https://www.itforce.mn/index.php/2021/04/30/powershell-script-notification-about-expiration-of-password-for-ad-user/" class="readmore">Continue reading &rarr;</a></span>{"id":1595,"date":"2021-04-30T08:10:32","date_gmt":"2021-04-30T00:10:32","guid":{"rendered":"https:\/\/www.itforce.mn\/?p=1595"},"modified":"2021-04-30T08:12:30","modified_gmt":"2021-04-30T00:12:30","slug":"powershell-script-notification-about-expiration-of-password-for-ad-user","status":"publish","type":"post","link":"https:\/\/www.itforce.mn\/index.php\/2021\/04\/30\/powershell-script-notification-about-expiration-of-password-for-ad-user\/","title":{"rendered":"powershell script notification about expiration of password for AD user"},"content":{"rendered":"<pre>#Import AD Module\r\nImport-Module ActiveDirectory\r\n\r\n#Create warning dates for future password expiration\r\n$SevenDayWarnDate = (get-date).adddays(7).ToLongDateString()\r\n$ThreeDayWarnDate = (get-date).adddays(3).ToLongDateString()\r\n$OneDayWarnDate = (get-date).adddays(1).ToLongDateString()\r\n\r\n#Email Variables\r\n<strong>$MailSender = \" Password AutoBot &lt;<a href=\"mailto:password-alerter@golomtbank.com\">password-alerter@itforce.com<\/a>&gt;\"<\/strong>\r\n$Subject = 'FYI - Your account password will expire soon'\r\n$EmailStub1 = 'I am a bot and performed this action automatically. I am here to inform you that the password for'\r\n$EmailStub2 = 'will expire in'\r\n$EmailStub3 = 'days on'\r\n$EmailStub4 = '. Please contact the helpdesk if you need assistance changing your password. DO NOT REPLY TO THIS EMAIL.'\r\n<strong>$SMTPServer = 'smtp.itforce.local'<\/strong>\r\n\r\n#Find accounts that are enabled and have expiring passwords\r\n$users = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False -and PasswordLastSet -gt 0 } `\r\n-Properties \"Name\", \"EmailAddress\", \"msDS-UserPasswordExpiryTimeComputed\" | Select-Object -Property \"Name\", \"EmailAddress\", `\r\n@{Name = \"PasswordExpiry\"; Expression = {[datetime]::FromFileTime($_.\"msDS-UserPasswordExpiryTimeComputed\").tolongdatestring() }}\r\n\r\n#check password expiration date and send email on match\r\nforeach ($user in $users) {\r\nif ($user.PasswordExpiry -eq $SevenDayWarnDate) {\r\n$days = 7\r\n$EmailBody = $EmailStub1, $user.name, $EmailStub2, $days, $EmailStub3, $SevenDayWarnDate, $EmailStub4 -join ' '\r\n\r\nSend-MailMessage -To $user.EmailAddress -From $MailSender -SmtpServer $SMTPServer -Subject $Subject -Body $EmailBody\r\n}\r\nelseif ($user.PasswordExpiry -eq $ThreeDayWarnDate) {\r\n$days = 3\r\n$EmailBody = $EmailStub1, $user.name, $EmailStub2, $days, $EmailStub3, $ThreeDayWarnDate, $EmailStub4 -join ' '\r\n\r\nSend-MailMessage -To $user.EmailAddress -From $MailSender -SmtpServer $SMTPServer -Subject $Subject `\r\n-Body $EmailBody\r\n}\r\nelseif ($user.PasswordExpiry -eq $oneDayWarnDate) {\r\n$days = 1\r\n$EmailBody = $EmailStub1, $user.name, $EmailStub2, $days, $EmailStub3, $OneDayWarnDate, $EmailStub4 -join ' '\r\n\r\nSend-MailMessage -To $user.EmailAddress -From $MailSender -SmtpServer $SMTPServer -Subject $Subject -Body $EmailBody\r\n}\r\nelse {}\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>ps<\/p>\n<p>if you need to send above notification in translation, for example in Mongolian and so on, then modify above commands as:<\/p>\n<pre>#Import AD Module\r\nImport-Module ActiveDirectory\r\n\r\n#Create warning dates for future password expiration\r\n$SevenDayWarnDate = (get-date).adddays(7).ToLongDateString()\r\n$ThreeDayWarnDate = (get-date).adddays(3).ToLongDateString()\r\n$OneDayWarnDate = (get-date).adddays(1).ToLongDateString()\r\n\r\n#Email Variables\r\n$MailSender = \" Password AutoBot &lt;<a href=\"mailto:password-alerter@golomtbank.com\">password-alerter@itforce.com<\/a>&gt;\"\r\n$Subject = 'FYI - Your account password will expire soon'\r\n$EmailStub1 = 'I am a bot and performed this action automatically. I am here to inform you that the password for'\r\n$EmailStub2 = 'will expire in'\r\n$EmailStub3 = 'days on'\r\n$EmailStub4 = '. Please contact the helpdesk if you need assistance changing your password. DO NOT REPLY TO THIS EMAIL.'\r\n$SMTPServer = 'smtp.itforce.local'\r\n\r\n#Find accounts that are enabled and have expiring passwords\r\n$users = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False -and PasswordLastSet -gt 0 } `\r\n-Properties \"Name\", \"EmailAddress\", \"msDS-UserPasswordExpiryTimeComputed\" | Select-Object -Property \"Name\", \"EmailAddress\", `\r\n@{Name = \"PasswordExpiry\"; Expression = {[datetime]::FromFileTime($_.\"msDS-UserPasswordExpiryTimeComputed\").tolongdatestring() }}\r\n\r\n#check password expiration date and send email on match\r\nforeach ($user in $users) {\r\nif ($user.PasswordExpiry -eq $SevenDayWarnDate) {\r\n$days = 7\r\n$EmailBody = $EmailStub1, $user.name, $EmailStub2, $days, $EmailStub3, $SevenDayWarnDate, $EmailStub4 -join ' '\r\n\r\nSend-MailMessage <strong>-Encoding utf8<\/strong> -To $user.EmailAddress -From $MailSender -SmtpServer $SMTPServer -Subject $Subject -Body $EmailBody\r\n}\r\nelseif ($user.PasswordExpiry -eq $ThreeDayWarnDate) {\r\n$days = 3\r\n$EmailBody = $EmailStub1, $user.name, $EmailStub2, $days, $EmailStub3, $ThreeDayWarnDate, $EmailStub4 -join ' '\r\n\r\nSend-MailMessage<strong> -Encoding utf8<\/strong> -To $user.EmailAddress -From $MailSender -SmtpServer $SMTPServer -Subject $Subject `\r\n-Body $EmailBody\r\n}\r\nelseif ($user.PasswordExpiry -eq $oneDayWarnDate) {\r\n$days = 1\r\n$EmailBody = $EmailStub1, $user.name, $EmailStub2, $days, $EmailStub3, $OneDayWarnDate, $EmailStub4 -join ' '\r\n\r\nSend-MailMessage <strong>-Encoding utf8<\/strong> -To $user.EmailAddress -From $MailSender -SmtpServer $SMTPServer -Subject $Subject -Body $EmailBody\r\n}\r\nelse {}\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":null,"protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,17],"tags":[],"class_list":["post-1595","post","type-post","status-publish","format-standard","hentry","category-active-directory","category-powershell-tips"],"_links":{"self":[{"href":"https:\/\/www.itforce.mn\/index.php\/wp-json\/wp\/v2\/posts\/1595","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.itforce.mn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.itforce.mn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.itforce.mn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.itforce.mn\/index.php\/wp-json\/wp\/v2\/comments?post=1595"}],"version-history":[{"count":3,"href":"https:\/\/www.itforce.mn\/index.php\/wp-json\/wp\/v2\/posts\/1595\/revisions"}],"predecessor-version":[{"id":1598,"href":"https:\/\/www.itforce.mn\/index.php\/wp-json\/wp\/v2\/posts\/1595\/revisions\/1598"}],"wp:attachment":[{"href":"https:\/\/www.itforce.mn\/index.php\/wp-json\/wp\/v2\/media?parent=1595"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.itforce.mn\/index.php\/wp-json\/wp\/v2\/categories?post=1595"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.itforce.mn\/index.php\/wp-json\/wp\/v2\/tags?post=1595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}