Еще с выходом в свет Windows 2008 администраторы столкнулись с маленькой, но неприятной проблемой: оповещение об истечении срока действия пароля пользователя стало сиротливо появляться в самом неприметном правом углу экрана. С выходом Windows 10 его появление вообще приобрело случайный момент. Отсюда и смена паролей в последний момент под аккомпанемент отказов доступа, и негодование, почему вдруг перестал работать VPN, и что с этим делать в командировке или на удаленке. Конечно, не проблема года, но явление назойливое, эмоциональное и, как следствие, неприятное.
Поэтому пишем Powershell скрипт. После анализа первоисточника я оставил у себя нижеследующий код:
Import-Module ActiveDirectory
# Задаем пороги срабатывания уведомлений в днях за 5 дней и за 1.
# Чаще нет смысла, пользователь либо реагирует либо бесполезно.)
$WarnDate = (get-date).adddays(5).ToLongDateString()
$AlarmDate = (get-date).adddays(1).ToLongDateString()
# Настройка тела сообщения напоминания
$MailSender = 'Monitor@forza.com'
$Subject = 'Увага! Термін дії Вашого паролю закінчується.'
$EmailStub1 = ", термін дії Вашого паролю закінчується "
$EmailStub2 = "`nБудь ласка, подбайте про зміну вашого паролю. Або зверніться в сервіс-деск."
$EmailStub3 = "`n`nЦе нагадування створено автоматично, не відповідайте на нього."
$SmtpServer = 'mail.forza.com'
# Получаем список пользователей домена которые:
# не заблокированные ― Enabled -eq $True.
# у кого пароль имеет срок жизни ― PasswordNeverExpires -eq $False
# у кого вообще не установлен пароль ― PasswordLastSet -gt 0
# у кого есть емаил ― EmailAddress -like '*'.
$users = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False -and PasswordLastSet -gt 0 -and EmailAddress -like '*'} `
-Properties "Name", "EmailAddress", "msDS-UserPasswordExpiryTimeComputed" | Select-Object -Property "Name", "EmailAddress", `
@{Name = "PasswordExpiry"; Expression = {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed").tolongdatestring() }}
# Сбрасываем полученый список для контроля:
$users | Export-Csv "d:\sources\Users.csv" -Encoding UTF8
# Задаем имя списка для тех кому будет отослано сообщение:
$filename5 = "d:\sources\Users5.csv"
$filename1 = "d:\sources\Users1.csv"
# Проверяем сроки действия и отправляем уведомления, и фиксируем ФИО пользователей в файлах.
foreach ($user in $users) {
if ($user.PasswordExpiry -eq $WarnDate) {
$EmailBody = $user.name, $EmailStub1, $WarnDate, $EmailStub2, $EmailStub3 -join ' '
$smtp = New-Object net.mail.smtpclient($SmtpServer)
$smtp.Send($MailSender, $user.EmailAddress, $Subject, $EmailBody)
$user.name + ', ' + $WarnDate | Out-File $filename5 -Append -Force -Encoding UTF8
}
elseif ($user.PasswordExpiry -eq $AlarmDate) {
$EmailBody = $user.name, $EmailStub1, $AlarmDate, $EmailStub2, $EmailStub3 -join ' '
$smtp = New-Object net.mail.smtpclient($SmtpServer)
$smtp.Send($MailSender, $user.EmailAddress, $Subject, $EmailBody)
$user.name + ', ' + $WarnDate | Out-File $filename1 -Append -Force -Encoding UTF8
}
else {}
}
No comments:
Post a Comment
А что вы думаете по этому поводу?