Информирование пользователя, о предстоящем событие смене пароля в windows, штатными средствами не реализовано. Зачастую все узнают по факту, на всплывающее уведомление в юзербаре мало кто обращает внимание. В свое время когда не знал что есть готовые решения http://habrahabr.ru/company/netwrix/blog/161345/
Утянул чей то готовый скрипт и адаптировал его под себя. Скрипт высылает уведомление пользователям, затем генерирует отчет для админов.
Не забывайте добавить ip машины на вашем почтовом сервере в анонимов. Также незабываем настроить выполнения скриптов в powershell.
Вот сам скрипт:
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
Import-Module ActiveDirectory #System globalization #$ci = New-Object System.Globalization.CultureInfo("ru-RU") #SMTP server name $smtpServer = "srv-mail.mycompany.local" #Creating a Mail object $msg = new-object Net.Mail.MailMessage #Creating a Mail object for report $msgr = new-object Net.Mail.MailMessage #Creating SMTP server object $smtp = new-object Net.Mail.SmtpClient($smtpServer) #E-mail structure Function EmailStructure($to,$expiryDate,$upn) { $msg.IsBodyHtml = $true $msg.From = "pwdmonitoring@mycompany.ru" $msg.To.Clear() $msg.To.Add($to) $msg.Subject = "Password expiration notice" $msg.Body = "<html><body><font face='Arial'>Сообщение сгенерированно автоматически.<br><br><b>напоминание, что пароль для вашего аккаунта <i><u>$upn</u></i> истекает $expiryDate.</b><br><br>Вы можете изменить свой пароль на </font></body></html>" } Function EmailStructureReport($to) { $msgr.IsBodyHtml = $true $msgr.From = "pwdmonitoring@mycompany.ru" $msgr.To.Add($to) $msgr.Subject = "Script running report" $msgr.Body = "<html><body><font face='Arial'><b>Это ежедневный отчет.<br><br>Скрипт успешно завершил работу.<br>$NotificationCounter пользователи получили уведомление:<br><br>$ListOfAccounts<br><br></b></font></body></html>" } #Set the target OU that will be searched for user accounts $OU = "OU=Пользователи,DC=mycompany,DC=local" $ADAccounts = Get-ADUser -LDAPFilter "(objectClass=user)" -searchbase $OU -properties PasswordExpired, extensionAttribute15, PasswordNeverExpires, PasswordLastSet, Mail, Enabled | Where-object {$_.Enabled -eq $true -and $_.PasswordNeverExpires -eq $false} $NotificationCounter = 0 $ListOfAccounts = "" Foreach ($ADAccount in $ADAccounts) { $accountFGPP = Get-ADUserResultantPasswordPolicy $ADAccount if ($accountFGPP -ne $null) { $maxPasswordAgeTimeSpan = $accountFGPP.MaxPasswordAge } else { $maxPasswordAgeTimeSpan = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge } #Fill in the user variables $samAccountName = $ADAccount.samAccountName $userEmailAddress = $ADAccount.mail $userPrincipalName = $ADAccount.UserPrincipalName if ($ADAccount.PasswordExpired) { Write-host "The password for account $samAccountName has expired!" } else { $ExpiryDate = $ADAccount.PasswordLastSet + $maxPasswordAgeTimeSpan $TodaysDate = Get-Date $DaysToExpire = $ExpiryDate - $TodaysDate $DaysToExpireDD = $DaysToExpire.ToString() -Split ("\S{17}$") Write-host "The password for account $samAccountName expires on: $ExpiryDate. Days left: $DaysToExpireDD" if (($DaysToExpire.Days -eq 15) -or ($DaysToExpire.Days -eq 7) -or ($DaysToExpire.Days -le 3)) { $expiryDate = $expiryDate.ToString("d",$ci) #Generate e-mail structure and send message if ($userEmailAddress) { EmailStructure $userEmailAddress $expiryDate $samAccountName $smtp.Send($msg) Write-Host "NOTIFICATION - $samAccountName :: e-mail was sent to $userEmailAddress" $NotificationCounter = $NotificationCounter + 1 $ListOfAccounts = $ListOfAccounts + $samAccountName + "	 - $DaysToExpireDD days left.<br>" } } } } Write-Host "SENDING REPORT TO IT DEPARTMENT" EmailStructureReport("support@mycompany.ru") $smtp.Send($msgr) |