Хотя компания Microsoft исключила требование периодически менять пароли пользователей из своих базовых принципов безопасности, в большинстве локальных доменов Active Directory существует политика, определяющая максимальный срок действия пароля пользователя. Пользователи часто забывают вовремя сменить пароль с истекшим сроком действия, что приводит к ненужным обращениям в службу ИТ-поддержки.
В этой статье мы рассмотрим, как узнать, когда истекает срок действия пароля учетной записи пользователя в домене, и как заранее напомнить пользователю о необходимости сменить пароль.
- Как получить дату истечения срока действия пароля пользователя в Active Directory
- Включение политики уведомления об истечении срока действия пароля в Active Directory
- Показ всплывающего уведомления об истечении срока действия пароля с помощью PowerShell
- Отправка уведомлений об истечении срока действия учетной записи по электронной почте с помощью PowerShell
Как получить дату истечения срока действия пароля пользователя в Active Directory
Параметры политики паролей домена AD определяют дату истечения срока действия пароля пользователя в домене. Чтобы узнать текущие настройки политики истечения срока действия пароля в домене, выполните команду PowerShell:
Get-ADDefaultDomainPasswordPolicy|select MaxPasswordAge
В этом примере максимальный возраст паролей пользователей в домене составляет 60 дней.
Свойства пользователя в Active Directory имеют только pwdLastSet атрибут, который содержит дату последней смены пароля (можно посмотреть в консоли ADUC (dsa.msc
)-> вкладка AD Attribute Editor).
Узнать срок действия пароля пользователя в домене можно с помощью PowerShell (требуется модуль AD PowerShell), который позволяет получить значение параметра msDS-UserPasswordExpiryTimeComputed атрибут. Атрибут msDS-UserPasswordExpiryTimeComputed — это конструируемый атрибут, значение которого автоматически вычисляется на основе даты последней смены пароля и настроек политики паролей домена.
Get-ADUser -Identity jsmith -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, PasswordNeverExpires, PasswordExpired |Select-Object -Property Name,PasswordLastSet, PasswordNeverExpires, PasswordExpired,@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}
Команда возвращает значения следующих атрибутов:
- PasswordLastSet — время последней смены пароля;
- PasswordNeverExpires — возвраты Правда если для пароля пользователя установлено значение Never Expire. Это одно из битовых значений атрибута UserAccountControl;
- PasswordExpired — возвращается Правда если срок действия пароля пользователя истек;
- ExpiryDate — дата истечения срока действия пароля.
Список всех пользователей из определенного контейнера AD (Organisational Unit), срок действия паролей которых истек:
$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=woshub,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet
$Users | select Name, @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, PasswordLastSet | where ExpirationDate -lt (Get-Date)
Включение политики уведомления об истечении срока действия пароля Active Directory
Если вы хотите уведомлять пользователей Active Directory о необходимости смены пароля, вы можете включить отдельную опцию групповой политики в Windows.
[Интерактивный вход в систему: Предложите пользователю сменить пароль до истечения срока действия политика находится в разделе GPO: Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Security Options.
Эта политика включена по умолчанию в настройках локальной групповой политики (gpedit.msc
). Уведомления начнут появляться за 5 дней до истечения срока действия пароля.
После включения этой политики, когда срок действия пароля пользователя истечет, уведомление о необходимости смены пароля будет появляться в системном трее каждый раз, когда пользователь будет входить в Windows. Можно изменить количество дней до появления уведомления о смене пароля.
Consider changing your password Your password will expire in xx days.
Однако это сообщение появляется на несколько секунд и часто игнорируется пользователями. Поэтому можно настроить дополнительное всплывающее уведомление для пользователей, когда им необходимо сменить пароль.
Показ всплывающего уведомления об истечении срока действия пароля с помощью PowerShell
Следующий сценарий PowerShell отображает всплывающее сообщение, предлагающее сменить пароль, если срок его действия истекает менее чем через 5 дней:
$DaysLeft = 5
try{
Add-Type -AssemblyName PresentationCore,PresentationFramework,WindowsBase,system.windows.forms
} catch {
Throw "Failed to load Windows Presentation Framework assemblies."
}
$curruser= Get-ADUser -Identity $env:username -Properties 'msDS-UserPasswordExpiryTimeComputed','PasswordNeverExpires'
if ( -not $curruser.'PasswordNeverExpires') {
$timediff=(new-timespan -start (get-date) -end ([datetime]::FromFileTime($curruser."msDS-UserPasswordExpiryTimeComputed"))).Days
if ($timediff -lt $DaysLeft) {
$msgBoxInput = [System.Windows.MessageBox]::Show("Your password will expire in "+ $timediff + " days!`nDoyou want to change it now?","Important!","YesNo","Warning")
switch ($msgBoxInput) {
'Yes' {
$Console = quser | Select-String -Pattern ">"| Select-String -Pattern "console" -Quiet
if ( $Console ) {
Start-Process -FilePath powershell -ArgumentList "-command Set-ADAccountPassword -Identity $env:username ; pause"
}
else {
cmd /c "C:\Windows\explorer.exe shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}"
}
}
'No' { }
}
}
}
Если до истечения срока действия пароля осталось менее 5 дней, сценарий предложит пользователю сменить пароль. Если пользователь нажмет кнопку Да, проверяется, вошел ли пользователь в систему на консоли компьютера или удаленно:
- Если обнаружены сеансы RDP, пользователь увидит запрос на изменение пароля Windows Security, который можно вызвать, нажав кнопку
Ctrl+Alt+Del
илиCtrl+Alt+End
(используется для изменения пароля в сеансе RDP). - Если пользователь вошел в систему локально (консольная сессия), команда Set-ADAccountPassword предложит вам изменить пароль.
Запланируйте этот сценарий PowerShell для запуска через планировщик задач или запустите его как сценарий входа в GPO.
Отправка уведомлений об истечении срока действия учетной записи по электронной почте с помощью PowerShell
Если вы хотите уведомить пользователей, отправив им электронное письмо, когда срок действия их пароля истекает, вы можете использовать этот сценарий PowerShell:
$Sender = "[email protected]"
$Subject="Important! Your password is about to expire!"
$BodyTxt1 = 'Your password for'
$BodyTxt2 = 'expires in '
$BodyTxt3 = 'days. Remember to change your password in advance. Contact the HelpDesk if you have any questions'
$smtpserver ="smtp.woshub.com"
$warnDays = (get-date).adddays(7)
$2Day = get-date
$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=woshub,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, EmailAddress, Name | select Name, @{Name ="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, EmailAddress
foreach ($user in $users) {
if (($user.ExpirationDate -lt $warnDays) -and ($2Day -lt $user.ExpirationDate) ) {
$lastdays = ( $user.ExpirationDate -$2Day).days
$EmailBody = $BodyTxt1, $user.name, $BodyTxt2, $lastdays, $BodyTxt3 -join ' '
Send-MailMessage -To $user.EmailAddress -From $Sender -SmtpServer $smtpserver -Subject $Subject -Body $EmailBody
}
}
Сценарий находит всех активных пользователей домена, срок действия паролей которых истекает. За 7 дней до истечения срока действия пароля пользователь начнет получать электронные письма, отправленные на адрес, указанный в AD. Письма будут отправляться до тех пор, пока пароль не будет изменен или не истечет срок его действия.
Регулярно запускайте этот сценарий PowerShell на любом компьютере/сервере в вашем домене (проще всего это делать с помощью планировщика задач). В этом примере мы не используем SMTP-аутентификацию в сценарии. Поэтому следует добавить IP-адрес этого хоста в список разрешенных отправителей на вашем SMTP-сервере, чтобы разрешить отправку почты без аутентификации.
- Отправка сообщений Telegram из PowerShell
- Отправка сообщения в чаты Teams с помощью PowerShell