Уведомление на почту о необходимости сменить пароль
Распространенный скрипт для отправки уведомлений на почту при истечении срока действия пароля. За три дня на почту начинают приходить уведомления о необходимости сменить пароль для учетной записи. В данной версии мы будет отправлять уведомления определенным пользователям, а не всем пользователям домена.
Итак, проверить срок действия пароля и дату установки можно следующей простой командой:
1 2 |
$Users = Get-ADUser -SearchBase 'OU=ADM,DC=flammlin,DC=local' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet $Users | select SamAccountName, Name, @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, PasswordLastSet |
После выполнения команды, из ‘OU=ADM,DC=flammlin,DC=local’ на экран будет отображен результат в табличном виде.
Для отправки писем с уведомлениями на почту используем следующий скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<# E-mail setting #> $EmailFrom = "Уведомление - PasswordExpiry <PasswordExpiry@flammlin.local>" $EmailSubject = "Уведомление о необходимости сменить пароль" $SMTPServer = "mail.flammlin.com" $Signature = "`n`nBest Regards,<br>flammlin.com<br>www.flammlin.com" <# E-mail setting #> <# Email function #> function send_email { $MailMessage = New-Object System.Net.Mail.MailMessage $MailMessage.from = ($EmailFrom) $MailMessage.To.add($EmailTo) $MailMessage.Subject = $EmailSubject $MailMessage.Body = $EmailBody $MailMessage.IsBodyHTML = $true $MailMessage.Priority = [System.Net.Mail.MailPriority]::High $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25) $SMTPClient.Send($MailMessage) } <# Email function #> $AdmUsers = "ivanov-adm", "denisov-adm", "shab-adm" foreach ($AdmUsr in $AdmUsers) { $Users = Get-ADUser -Identity $AdmUsr -Properties 'msDS-UserPasswordExpiryTimeComputed' $TimeDifference = (New-TimeSpan -start (Get-Date) -end ([datetime]::FromFileTime($Users."msDS-UserPasswordExpiryTimeComputed"))).Days if ($TimeDifference -lt 3) #истекает менее чем через 3 дня { Write-Host "У пользователя $AdmUsr через $TimeDifference дня истекает срок действия пароля." $EmailTo = Get-ADUser -Identity $AdmUsr -Properties EmailAddress | select -ExpandProperty EmailAddress $EmailBody = "<h3>Добрый день!</h3> У учетной записи $AdmUsr через $TimeDifference дня истекает срок действия пароля.<br><br> <b>Не забудьте сменить пароль!</b><br><br><br>`n $Signature" Write-Host $EmailTo send_email } |
Отправленным письма будет выставлен высокий приоритет — $MailMessage.Priority = [System.Net.Mail.MailPriority]::High. В переменной $AdmUsers указываются те пользователи, за сроком действия паролей, которых будет наблюдать скрипт.
Скрипт проверяет всех пользователей из $AdmUsers и отправляет письмо если срок действия истекает.
2 комментария
Кирилл
геморно) а как сделать, чтобы всех юзаков в домене проверял? чтобы не прописывать и новых не добавлять.
petrov.ivan
Использовать что-то типа того: Get-ADUser -Filter * -properties mail
Как вариант — https://social.technet.microsoft.com/wiki/contents/articles/23313.notify-active-directory-users-about-password-expiry-using-powershell.aspx