Я хочу найти в Active Directory неактивных пользователей, у которых нет логина в течение x дней / месяцев. У меня такой запрос ldapsearch:

ldapsearch -h domain.test -p 389 -D "cn=login,ou=test,dc=domain,dc=test" -w "passwd" -s sub -b "ou=Test,dc=domain,dc=test" "(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))"

Это дает мне список всех неактивных пользователей в domain.test со всеми атрибутами.

Я хотел бы добавить фильтр для поиска пользователей, у которых нет входа в систему в течение x дней / месяцев, и было бы замечательно, если бы результатом был список sAMAccountNames (неактивный пользователь и lastLogonTimestamp> например, 3 месяца). Я знаю, что LastLogonTimestamp не является реальным временем последнего входа пользователя, но в этом случае это не так важно.

РЕДАКТИРОВАТЬ: теперь мне нужно только знать, есть ли способ показать атрибут, как "lastLogonTimestamp" в выводе вышеупомянутого запроса ldapsearch?

ОТВЕТ: Атрибут lastLogonTimestamp не был установлен для каждого объекта в выходных данных вышеупомянутого запроса ldapsearch. Я этого не заметил. Итак, grep отобразил это:

ldapsearch -h domain.test -p 389 -D "cn=login,ou=test,dc=domain,dc=test" -w "passwd" -s sub -b "ou=Test,dc=domain,dc=test" "(&(objectCategory=person)(objectClass=user)(userAccountCont‌​rol:1.2.840.113556.1‌​.4.803:=2))" | grep -i lastlogontimestamp 

РЕДАКТИРОВАТЬ: Для преобразования окон lastLogonTimestamp на сегодняшний день я использовал:

while read -r line;
    do
    let "ts = ($line / 10000000) - 11644473600" && echo $ts >> linux_timestamp;
    date -d @$ts +'%Y%m%d' >> linux_date;
    done < users_lastlogontimestamp

Любой совет очень ценится.

2 ответа2

0

Вам просто нужно изменить свой фильтр, чтобы добавить другое условие, чтобы сервер ldap возвращал только записи с lastLogonTimestamp> = timestamp. Чтобы получить только определенные атрибуты вместо всей записи, укажите атрибуты, которые будут возвращены сервером.

Например:-

ldapsearch -h domain.test -p 389 -D "cn=login,ou=test,dc=domain,dc=test" -w "passwd" -s sub -b "ou=Test,dc=domain,dc=test" "(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2)(lastlogontimestamp>=131550784796762354))" samAccountName lastlogontimestamp
0

Спасибо за ответ Наймуддина.

Я думаю, что будет хорошо сравнивать lastlogontimestamps - это не потому, что значения lastlogontimestamp несопоставимы. Единственное, что нужно, - это сначала преобразовать в формат даты, а затем сравнить, чтобы получить пользователей, например, lastlogon. до 01.06.2017. И вот вопрос: как конвертировать windows lastlogontimestamp в дату в bash?

Пожалуйста, дайте мне знать, если это правильный способ сделать это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .