sergey vasin

The IT blog

Получение значения атрибута pwdLastSet объекта пользователя при запросе к Active Directory с использованием LDAP

leave a comment »

Скажем сразу — все, что здесь описано касается также и остальных атрибутов, содержащих значение даты и времени. Тем не менее в этой статье мы будем говорить об атрибуте pwdLastSet, а применить описанные подходы к другим атрибутам вы сможете и сами.

Когда для запросов к Active Directory мы используем командлеты одноименного модуля, то результаты их выполнения не требуют от нас каких-либо дополнительынх действий. Однако, если по каким-то причинам решили использовать LDAP, здесь все немного сложнее.

DirectorySearcher

Начнем с варианта с использованием объекта DirectorySearcher.

Создать его мы можем несколькими способами.

Один из них — это использование акселератора [adsisearcher] и указания нужной нам строки фильтра. Например, так:

$ADSISearcher = [adsisearcher]'(&(objectCategory=person)(userPrincipalName=someuser*))'

Либо же мы можем воспользоваться командлетом New-Object для создания объекта DirectorySearcher и уже затем определить значения тех его свойств, которые нам понадобятся. К ним же относится и свойство Filter.

$ADSISearcher = New-Object -TypeName System.DirectoryServices.DirectorySearcher
$ADSISearcher.Filter = '(&(objectCategory=person)(userPrincipalName=someuser*))'

Вне зависимости от метода создания объекта DirectorySearcher, выполнить поиск в Active Directory мы можем при помощи методов FindOne и FindAll. Предположим, что в нашем случае существует только один пользователь, UPN которого начинается с someuser.

$user = $ADSISearcher.FindOne()

Теперь, если мы обратимся к значению атрибута pwdLastSet, мы получим что-то вроде:

$user.Properties.pwdlastset

131492520842896810

Что это означает? Как известно, значение атрибута pwdLastSet отражает момент времени, когда пользователь последний раз изменял пароль. Но представлено это значение в виде количества интервалов длиной 100 наносекунд, исчисляемого с 1 января 1601 (UTC).

Для того, чтобы перевести это значение в более привычный нам формат, мы можем воспользоваться статическим методом FromFileTime класса System.DateTime.

[datetime]::FromFileTime($($user.Properties.pwdlastset))

Thursday, September 7, 2017 1:01:24 PM

С другой стороны, если мы захотим перевести объект типа System.DateTime в вышеупомянутый формат, мы можем воспользоваться методом ToFileTime самого объекта DateTime. Например:

$date = Get-Date
$date

Thursday, September 7, 2017 1:17:09 PM

$date.ToFileTime()

131492530296845727

LDAP://

Теперь давайте предположим, что нам известно значение DistinguishedName пользователя и мы хотим запросить объект напрямую, без использования DirectorySearcher. Сделаем мы это так:

$user = [ADSI]"LDAP://CN=SomeUser,CN=Users,DC=domain,DC=com"

Теперь, обратившись к атрибуту pwdLastSet, мы получим еще более любопытный результат:

$user.pwdLastSet

System.__ComObject

Таким образом отображается значение атрибута в формате large integer, в котором оно, собственно, и хранится в Active Directory.

Для того, чтобы сконвертировать его для начала в тот формат, который мы получили при использовании DirectorySearcher, мы можем воспользоваться методом ConvertLargeIntegerToInt64 этого самого объекта System.DirectoryServices.DirectoryEntry, находящегося в нашем случае в переменной $user.

Например, так:

$user.ConvertLargeIntegerToInt64($($user.pwdLastSet))

131492520842896810

И уже теперь, так же как и в прошлый раз, мы можем перевести полученное значение в формат DateTime:

[datetime]::FromFileTime($user.ConvertLargeIntegerToInt64($($user.pwdLastSet)))

Thursday, September 7, 2017 1:01:24 PM

Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Сентябрь 7, 2017 в 13:26

Опубликовано в Active Directory, PowerShell

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s