Ви є тут

Напоминание о смене пароля для Windows 7. VBS скрипт

Операционная система Windows 7 внесла немало изменений в работу не только пользователя, а и системного администратора. Например, напоминание о изменении пароля ненавязчивое, появляется в трее и исчезает само:

Если вспомнить Windows XP, то там ситуация была лучше: сообщение появлялось сразу после ввода пароля, предлагалось сменить пароль сейчас, загрузка не продолжалась до действия пользователя:

Чем же ситуация в Windows 7 хуже? Дело в том, что пользователь часто игнорирует всплывающую подсказку в трее, не замечает как его пароль просрочен (но компьютер, при этом, пускает пользователя без проблем), возникают проблемы с сетевой авторизацией.

Решение проблемы напоминания смены пароля в Windows 7

Официально, исправить ситуацию нельзя - Майкрософт не позаботилась о решении этой проблемы. Единственный выход - самописный скрипт. 

Его (скрипта) задача посчитать строк действия пароля и в случае приближения истечения срока действия пароля (порог задается) выводить окно напоминания. Вариант подобного скрипта мне посоветовали на форуме. Он полностью отвечал требованиям, я добавил только проверку версии ОС, чтобы отрабатывалось исключительно на Windows 7.

 

strComputer = "."
REM ========================================
REM Проверка версии операционной системы.
REM Если Windows 7, то действуем дальше
REM ========================================
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
Select Case Left(objOperatingSystem.Caption,19)
Case "Microsoft Windows 7"

REM ========================================
REM Доменные политики и количество дней
REM ========================================
Dim oDomain
Dim oUser
Dim maxPwdAge
Dim numDays
Dim warningDays
warningDays = 15 ' порог срабатывания уведомления

Set LoginInfo = CreateObject("ADSystemInfo") 
Set objUser = GetObject("LDAP://" & LoginInfo.UserName & "") 

strDomainDN = UCase(LoginInfo.DomainDNSName) 
strUserDN = LoginInfo.UserName

Set oDomain = GetObject("LDAP://" & strDomainDN)
Set maxPwdAge = oDomain.Get("maxPwdAge")

REM ========================================
REM Считаем сколько дней осталось
REM ========================================
numDays = CCur((maxPwdAge.HighPart * 2 ^ 32) + _
maxPwdAge.LowPart) / CCur(-864000000000)
REM WScript.Echo "Maximum Password Age: " & numDays ' это для дэбага

REM ========================================
REM Определяем когда менялся пароль
REM ========================================
Set oUser = GetObject("LDAP://" & strUserDN)
whenPasswordExpires = DateAdd("d", numDays, oUser.PasswordLastChanged)
fromDate = Date
daysLeft = DateDiff("d",fromDate,whenPasswordExpires)

REM WScript.Echo "Password Last Changed: " & oUser.PasswordLastChanged
if (daysLeft < warningDays) and (daysLeft > -1) then
Msgbox "Число дней до истечения срока действия пароля: " & daysLeft & "." & chr(13) & "Пароль действительный до " & whenPasswordExpires & chr(13) & chr(13) & "Чтобы изменить пароль, нажмите клавиши " & chr(13) & "CTRL+ALT+DEL и выберите 'Сменить пароль...'", 0, "Рекомендуется изменить ваш пароль"
End if

REM ========================================
REM Конец проверки версии ОС
REM ========================================
End Select
Next
REM ========================================
REM Зачистка
REM ========================================
Set oUser = Nothing
Set maxPwdAge = Nothing
Set oDomain = Nothing

 

Запускать скрипт груповой политикой (логон-скрипт). Результат работы такой:

Коментарі

Есть еще один выход - специализированное ПО, предназначенной для этих целей оповещения пользователей - например, NetWrix Password Expiration Notifier. Причем есть как бесплатная базовая версия (уведомление пользователей о том, что пароль необходимо сменить), так и с полная с расширенными возможностями (настройка оповещений, фильтрация, оповещения по SMS). 

редкой красоты скрипт! не пришлось ничего дорабатывать напильником. Спасибо!

Спасибо, старался

У меня не работаетDC  Win2008R2Скрипт запускается через bat файлик.  

Если на клиенте запустить скрипт (vbs), что пишет? Ошибки выдает?

Как допилить под Win 2008R2?

Я так думаю, нужно в секции

REM ========================================
REM Проверка версии операционной системы.
REM Если Windows 7, то действуем дальше
REM ========================================
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
Select Case Left(objOperatingSystem.Caption,19)
Case "Microsoft Windows 7"

изменить версию "Microsoft Windows 7" на нужную.

Я не силен в автозапуске скриптов, подскажите, как его запустить на win server 2008  r2 ?

Task Scheduler (Назначенные задания).

Нужно прописать:

cscript <путь к скрипту>

 

А разве не через групповые политики его нужно запускать?

Да, протупил.

Через групповые политики скрипт нужно добавлять так (User Configuration - Policies - Windows Settings - Scripts - Logon):

 

Спасибо, получилось.

Здравствуйте, попробовал запустить скрипт на win 2012 r2 . Мои действия: сохранил вышеуказанный скрипт в формате .ps1. В групповых политиках, как указано на скриншоте сверху, добавить powershell скрипт. Применил политику, при входе в систему уведомление о смене пароля не меняется, подскажите, может не то делаю?

Приветствую.

Во-первых, скрипт VBS. Поэтому нужно сохранять в формате .vbs

Во-вторых, скрипт написан для Windows 7. Поэтому нужно исправить под нужную версию ОС (выше в комментариях об этом писал).

 

Изменил расширение скрипта на .vbs. Изменил версию Windows на Windows Server 2012 R2 Standart.Скрипт все равно не вылоняется. Думаю, что что-то делаю не так)

Если запустить скрипт руками что-то происходит?

Да, я разобрался) Поместил скрипт в расшаренную папку, в скрипте оставил все как у вас. ДОбавил скрипт в групповые политики, теперь при входе пользователя под windows 7 у него появляется это уведомление. Но есть маленькая проблемка, когда срабатывает скрипт то в нем написано, что осталось 6 дней, а стандартное уведомление говорит, что 5. Не знаете в чем может быть проблема?

Рад что все получилось. Почему говорит 6 а не 5 дней - тут, скорее всего, виновата математика и округление. Смотреть эту часть скрипта:

REM ========================================
REM Считаем сколько дней осталось
REM ========================================
numDays = CCur((maxPwdAge.HighPart * 2 ^ 32) + _
maxPwdAge.LowPart) / CCur(-864000000000)

Или забить )))

Вариант забить меня полностью устраивает) Ибо пользователи раньше ведь не замечали дефолтного уведомления,как раз поэтому я и занялся поиском решения проблемы.Спасибо еще раз)

А вообще чисто для интереса попробовал, и вдруг кому понадобиться. Чтобы правильное время появлялось заменил в строчке  maxPwdAge.LowPart) / CCur(-864000000000), цифру 4 на 5. Теперь дата определяется корректно

Приветствую!У меня Win2008R2Ent и Win2012, через групповые политики не запускается, локально пробую сам скрипт запустить, поправленный под 2008 и 2012 соответственно, ничего не происходит( ни ошибок, ничего..

Привет.

Скрипт выдает уведомление только если пароль истекает раньше, чем установленный порог. Если ваш пароль не истекает - уведомлений не будет. Попробуйте раскоментить строку:

REM WScript.Echo "Maximum Password Age: " & numDays ' это для дэбага

 

Да на 7 отрабатывает..А на серверных, может приведете как правильно писать? Пробовал "Microsoft Windows Server 2008 R2 Enterprise" собсно такая система и есть..есть еще 2012 Datacenter.. На них упорно не хочет. И включенный дебаг ничего не показывает

Ну, по большому счету, можно исключить проверку версии ОС вообще - и скрипт будет отрабатывать на всех версиях.

Убираем вот это?REM ========================================REM Проверка версии операционной системы.REM Если Windows 7, то действуем дальшеREM ========================================Set objWMIService = GetObject("winmgmts:" _    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")Set colOperatingSystems = objWMIService.ExecQuery _    ("Select * from Win32_OperatingSystem")For Each objOperatingSystem in colOperatingSystemsSelect Case Left(objOperatingSystem.Caption,19)Case "Microsoft Windows 7"

Да. Там еще в конце что-то.

REM ========================================
REM Конец проверки версии ОС
REM ========================================
End Select
Next

Это, кажется. Запуск подскажет ;)

Ееееес!!!!Без проверки действительно сработало отлично!)Спасибо огромнейшее!!! Респекты в карму просто нереальные Вам!)

Рано обрадовался...на 2008 отработал, а на 2012 не хочет. Принудительно запустил - показывает. а при входе в систему окошка нет..Мож в 2012 гпо где секрет есть? или пните куда глядеть...

Нет никакой разницы при запуске руками и групповыми политиками. Если сприпт отрабатывает, значит и в групповых политиках будет. Если при входе в систему окошка нет - смотреть логон скрипт в групповых политиках.

Да смотрел rsop там показывает что политика отрабатывает, та же политика под тем же юзером на 2008 отрабатывает на ура. на 2012 что заметил окошко появляется, но спустя несколько минут) вот и не знаю даже куда копать)))Проверка зато убралась, это радует)

Запускаю на w7 x64. При запуске ошибка:строка 36символ 1ошибка: Переполнение: "ccur"Что это может быть?

I like the valuable info you provide in your articles. I will bookmark your blog and check again here regularly. I am quite certain I'll learn a lot of new stuff right here! Best of luck for the next! cafeefdebabc

А как быть с компами, где стоит галка Срок действия пароля не ограничен?п.с. Уведомление о смене пароля также появляется. Отсчет времени, я так понимаю, начинается с момента запуска скрипта.

с учетной записью юзеров*

у меня не работает скрипт на 2008 r2Отключил блок проверки ОСзапускаю выходит ошибка:Сопоставление между именами пользователей и идентификаторами безопасности не было произведено.в чем проблема?

скрипт не работает на 2012 . Отключил блок проверки ОС. Скрипт запускаю и ничего не происходит.

вот работающий скрипт для 2008/2012 http://paste.org.ru/?20nkn6

А зачем проверку сократили? Было: if (daysLeft < warningDays) and (daysLeft > -1) then Стало: if (daysLeft < warningDays) then

Вот то же самое но записанное в 6 (!) строчек. Еще и с проверкой на случай если юзер имеет бессрочный пароль (галочка "password never expire" в AD). Проверки версии ОС нет, т.к. от XP в домене уже давно пора отказаться (да и не в домене тоже).
Скрипт сохранять в файле с расширением .vbs

===============
WarningDays = 10 'За сколько дней будет выводиться сообщение (порог срабатывания)

Set oLoginInfo = CreateObject("ADSystemInfo") 'Получаем информацию о текущем окружении

Set oUser = GetObject("LDAP://" & oLoginInfo.UserName) 'Получаем информацию о юзере

WhenPasswordExpires = oUser.PasswordExpirationDate 'Получаем дату и время истечения пароля

DaysLeft = DateDiff("d",Date,WhenPasswordExpires) 'Вычисляем сколько дней осталось (по разнице между текущей датой и датой истечения)

'Выводим сообщение если удовлетворяет порогу срабатывания и если пароль пользователя не бессрочный
if (DaysLeft =< WarningDays) and (WhenPasswordExpires <> "01.01.1970") then Msgbox "Число дней до истечения срока действия пароля: " & daysLeft & chr(13) & "Пароль действителен до " & WhenPasswordExpires & chr(13) & chr(13) & "Чтобы изменить пароль, нажмите клавиши" & chr(13) & "Ctrl+Alt+Del и выберите 'Сменить пароль...'." & chr(13) & chr(13) & "Не откладывайте смену пароля на последний день!!!", 0, "Рекомендуется изменить ваш пароль!"

Додати коментар

Filtered HTML

  • Адреси сторінок і електронної пошти атоматично перетворюються у посилання.
  • Дозволені теги HTML: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Рядки та параграфи відокремлюються автоматично.

Plain text

  • HTML теґи не відображаються
  • Рядки та параграфи відокремлюються автоматично.
By submitting this form, you accept the Mollom privacy policy.

Вхід

Powered by Rublin team