ldapsearch - как отобразить "метку lastLogonTimestamp" и преобразовать метку Windows lastlogontimestamp в дату в bash
Я хочу выполнить поиск в 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))"
Он дает мне список всех неактивных пользователей в домене.test со всеми атрибутами.
Я хотел бы добавить фильтр для поиска пользователей, у которых нет входа в систему в течение x дней/месяцев, и было бы здорово, если бы результатом был список имен учетных записей (неактивный пользователь и отметка 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)(userAccountControl:1.2.840.113556.1.4.803:=2))" | grep -i lastlogontimestamp
ИЗМЕНИТЬ: Чтобы преобразовать метку Windows 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
Любые советы очень ценятся.