Home »

Напоминание смене п...
 

[Решено] Напоминание смене пароля пользователя в домене


STALKER_SLX
Сообщения: 200
Topic starter
(@stalker_slx)
Devops
Присоединился: 2 года назад

Доброго времени суток уважаемые форумчане!

В нашей компании основная работа пользователей сосредоточена на терминальных серверах под управлением ОС «Windows Server 2019».

Думаю, Вы неоднократно сталкивались с ситуацией, когда пользователь «забывает» вовремя сменить свой доменный пароль и жалуется сразу руководству, что он не может работать…

Такие ситуации бывают по разным причинам: отсутствие для этого должных знаний, лень, здравый пофигизм etc.

 

В связи с чем, возникла необходимость за 5-7дней до окончания срока действия пароля доменного пользователя автоматически предлагать ему сменить пароль, как это описано тут:

«Когда истекает пароль пользователя в AD, оповещаем пользователей о необходимости сменить пароль»

https://winitpro.ru/index.php/2020/02/25/ad-user-password-expiration/

 

Для этого создал powershell-скрипт со следующим содержимым (приведу его для лучшей наглядности):

 $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 5) {

$msgBoxInput = [System.Windows.MessageBox]::Show("Ваш пароль истекает через "+ $timediff + " дней!`nХотите сменить пароль сейчас?","Внимание!","YesNo","Warning")

switch ($msgBoxInput) {

'Yes' {

cmd /c "explorer shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}"

}

'No' { }

}

}

}

  И тут столкнулся с проблемой: при выполнении указанного содержимого в «PowerShell ISE» все отрабатывает корректно без ошибок, но если запускаю сохраненный скрипт из оболочки «PowerShell» от обычного пользователя или через GPO, то появляется ошибка:


Не удалось найти тип [System.Windows.MessageBox].
C:\Users\имя_пользователя\Documents\ad_user_pass_expired.ps1:5 знак:16
+ $msgBoxInput = [System.Windows.MessageBox]::Show("Ваш пароль истекает ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Windows.MessageBox:TypeName) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
 

Немного погуглив, народ рекомендует использовать такую строку:

Add-Type PresentationFramework

либо вот такую

Add-Type -AssemblyName System.Windows.Forms

Но только я не пойму куда именно в скрипте (после каких строк или команд) нужно подставлять одну из приведенных строк…

 Сразу признаюсь, что я не силён в программировании «PowerShell», поэтому прошу Вас помочь мне разобраться в этой задаче!

 

Ответить
6 Ответов
ArcheRAWG
Сообщения: 8
(@archerawg)
Младший сисадмин
Присоединился: 4 года назад

Не много не потеме конечно... у нас в конторе win2k12r2. И тоже политика со сменой пароля. Только вот она из коробки начинает напоминать пользователю о смене пароля за пару дней. Точно сказать не могу за сколько. Ну и соответственно после оконочания срока действия пароля - юзер просто не может войти в систему не сменив пароль. 

Ответить
Dzhon D
Сообщения: 19
(@dzhon-d)
Младший сисадмин
Присоединился: 2 года назад

Я может чего-то не понимаю. Но зачем PS. Если можно штатными средствами.

 

В Windows есть отдельный параметр групповой политики, позволяющий оповещать пользователей о необходимости сменить пароль.

Политика называется Interactive logon: Prompt user to change password before expiration и находится в разделе GPO Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Security Options.

По умолчанию эту политика включена на уровне локальных настроек Windows и уведомления начинают появляться за 5 дней до истечения срока действия пароля. Вы можете изменить количество дней, в течении которых должно появляться уведомление о смене пароля.

Ответить
2 Ответы
ArcheRAWG
(@archerawg)
Присоединился: 4 года назад

Младший сисадмин
Сообщения: 8

@dzhon-d вот и я об этом

Ответить
STALKER_SLX
(@stalker_slx)
Присоединился: 2 года назад

Devops
Сообщения: 200

@dzhon-d да, так и есть у нас! Но вот это окошко на Win10 и на терминальных серверах WinSrv 2019 появляется только после входа в систему внизу в трее и почти сразу исчезает!

А наши пользователи, как обычно ее не замечают или не хотят! Поэтому и было принято решение - за 5 дней до окончания срока действия пароля выводить отдельное окошко с предложением сменить пароль, которое само по себе не закрывается, а мозолит пользователю глаза.

Ответить
STALKER_SLX
Сообщения: 200
Topic starter
(@stalker_slx)
Devops
Присоединился: 2 года назад

Проблема решена! Был немного невнимателен! Свой рабочий скрипт прикреплю сюда - может кому-то пригодится!

Ответить
1 Ответить
bor13
(@bor13)
Присоединился: 2 года назад

Младший сисадмин
Сообщения: 16

@stalker_slx Вот такой vbs скрипт использую. Powershell слишком круто для такой задачи.

Может пригодится кому.

Ответить