ldapsearch - comment afficher "lastlogontimestamp" et convertir Windows lastlogontimestamp à ce jour dans bash
Je souhaite rechercher dans Active Directory des utilisateurs inactifs qui n'ont pas de connexion pendant x jours / mois. J'ai une telle requête 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))"
Cela me donne la liste de tous les utilisateurs inactifs du domaine.test avec tous les attributs.
Je voudrais ajouter un filtre pour rechercher des utilisateurs qui n'ont pas de connexion pendant x jours / mois, et ce serait génial si le résultat était la liste des noms de compte SAM (utilisateur inactif et lastLogonTimestamp> par exemple 3 mois). Je suis conscient que LastLogonTimestamp n'est pas le temps réel de la dernière connexion utilisateur, mais dans ce cas, ce n'est pas si important.
EDIT: maintenant, je dois seulement savoir s'il existe un moyen d'afficher un attribut comme "Lastlogontimestamp" dans la sortie de la requête ldapsearch ci-dessus?
RÉPONSE : L'attribut lastLogonTimestamp n'a pas été défini pour chaque objet dans la sortie de la requête ldapsearch ci-dessus. Je ne l'ai pas remarqué. Alors grep l'a affiché :
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
EDIT: Pour convertir Windows lastLogonTimestamp à ce jour, j'ai utilisé :
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
Tout conseil très apprécié.