2017-01-18 4 views
1

Я пытаюсь выполнить запрос, чтобы найти все учетные записи, срок действия которых истекает менее чем за 30 дней (с сервера Linux и, таким образом, с помощью ldapsearch).Поиск LDAP в Active Directory

Вот запрос я посылаю к серверу AD:

ldapsearch -x -h IP -D "[домен] [пользователь]" -w [пароль] -b «DC = [DC], О.К. = [DC]»-s юг "(& (ObjectCategory = человек) (объектный = пользователь) (accountExpires> = 1) (accountExpires < = 30))"

Я не получаю имя, так как все счета похоже, имеет учетную записьExpires, которая равна 0 или 2^63 -1.

Когда я запускаю этот запрос из окна PowerShell (на сервере Windows) я получаю правильный ответ:

Поиск-ADAccount -AccountExpiring -TimeSpan 30,00: 00: 00 | где {$ _. ObjectClass -eq 'user'} | FT Имя, ObjectClass -A

Можете ли вы объяснить мне, почему мой ldapsearch не дает того же результата?

Спасибо!

ответ

0

Формат атрибута accountExpires - это число интервалов в 100-наносекунд с 1 января 1601 года (UTC). См. these details по данному атрибуту:

Дата окончания действия учетной записи. Это значение представляет собой число 100-наносекундных интервалов с 1 января 1601 года (UTC). Значение 0 или 0x7FFFFFFFFFFFFFFF (9223372036854775807) указывает, что счет не истекает.

Так что вам нужно отформатировать временную метку Linux/Unix в этом формате, чтобы получить правильное значение для отправки в AD. Это может быть что-то вроде (извините за плохие навыки Баш ...):

# Get the windows timestamp value for 30 days from now... 
expires_at=$(($(($(date -d "+30 days" +"%s") * 10000000)) + 116444736000000000)) 

Тогда LDAP фильтр:

(&(objectCategory=person)(objectClass=user)(accountExpires>=1)(accountExpires<=$expires_at)) 
Смежные вопросы