Заметки о Windows и других программных продуктах Microsoft...

Как изменить дату установки пароля пользователя в Active Directory

Как изменить дату установки пароля пользователя в Active Directory

У учетной записи пользователя в ActiveDirectory есть два атрибута, в которых хранится последнее время смены пароля учетной записи. Это атрибуты pwdLastSet и PasswordLastSet.

Различаются они форматом записи. PasswordLastSet хранит данные в нормальном читабельном виде, а вот в pwdLastSet дата хранится в виде большого целого числа, которое представляет собой количество 100-наносекундных интервалов, прошедших с 12:00 полуночи, 1 января 1601 года нашей эры в формате UTC (Coordinated Universal Time).

pwdlastset и passwordLastSet

 

Примечание. Структура FILETIME записывает время в виде 100-наносекундных интервалов с 1 января 1601 года. Почему была выбрана именно эта дата?
Эта дата является началом цикла високосных лет по григорианскому календарю. Григорианский календарь работает по 400-летнему циклу, и 1601 год — это первый год цикла, который был активен во время разработки Windows NT. По заявлению одного из разработчиков Microsoft Рэймонда Чена (Raymond Chen), эта дата была выбрана для красоты расчетов.

Сконвертировать значение pwdLastSet можно с помощью метода FromFileTime, например:

$user = Get-ADUser admin1 -Properties PasswordLastSet,pwdLastSet
[datetime]::FromFileTime($user.pwdLastSet)

конвертация pwdLastSet

 

Можно и наоборот. Для примера возьмем дату 1 января 2023 года и сконвертируем ее в формат FileTime:

(Get-Date "1/1/2023").ToFileTime()

Однако если мы попробуем полученное число добавить в качестве значения атрибута pwdLastSet, то получим ошибку. Установить произвольное значение даты смены пароля вручную невозможно.

попытка установки значения pwdLastSet

 

Но кроме обычной даты pwdLastSet может принимать еще два значения — 0 и -1, и эти значения можно задать вручную.

Значение 0 означает, что пароль не был задан, и, соответственно, его необходимо задать при следующем входе в систему.

Значение -1 является обратным значению 0 и соответствует максимальному целому числу, допустимому в 64-битном формате (2^63-1). Установка значения pwdLastSet равным -1 делает пароль не просроченным, и когда пользователь в следующий раз войдет в систему, атрибуту pwdLastSet будет присвоено значение, соответствующее текущей дате/времени.

Таким образом, мы не можем задать произвольную дату установки пароля, но можем сбросить еe на текущую дату. При этом надо сначала установить значение атрибута pwdLastSet равным 0, и только потом задать значение -1.

Для примера возьмем пользователя admin1. Как можно убедиться из предыдущих примеров, он менял свой пароль 16 ноября 2022 года.

Для начала выведем текущую дату. Затем изменяем значение атрибута на 0:

Set-ADUser admin1 -Replace @(pwdLastSet='0')

потом на -1:

Set-ADUser admin1 -Replace @(pwdLastSet='-1')

и проверяем полученный результат. Как видите, дата смены пароля изменилась на текущую.

сброс значения pwdLastSet

 


Когда может возникнуть необходимость вручную менять дату смены пароля? Например при изменении парольной политики в домене. К примеру у вас в политике не был указан максимальный срок действия пароля, и все пароли были бессрочными. И вот требования к безопасности изменились и вы собираетесь установить срок действия пароля ну скажем 90 дней. Если просто активировать политику, то у большинства пользователей пароли сразу окажутся просроченными и их надо будет сменить.

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

Вот как то так.

 
 
Комментарии

Когда-то делал такую процедуру скриптом с PSGallery и после установки pwdlastset=0 пришлось ещё дёрнуть ChangePasswordAtLogon.

Без этого поле PasswordLastSet залипло с пустым значением и у пользователей не появлялся запрос на смену пароля.

И возможно ещё дёрнуть PasswordNeverExpires, если он тоже был включен до сброса даты.

Leave a Reply to Anonymous