2017-01-18 2 views
1

(Linux 서버에서 ldapsearch를 사용하여) 30 일 이내에 만료되는 계정을 모두 찾으라는 요청을 보내려고합니다.Active Directory에서 LDAP 검색

의 ldapsearch -x -h IP -D "[도메인] [사용자]"-w [암호] -b "DC = [DC, DC : 여기

내가 AD 서버로 보내는 요청입니다 = [DC] "-s 서브"(& (수 objectcategory = 사람) (방법 objectClass = 사용자) (accountExpires> = 1) (accountExpires < = 30)) "

나는 모든 계정 때문에 어떤 이름을 얻지 않는다 accountExpires가 0 또는 2^63 -1 인 것 같습니다. 내가 (윈도우 서버) 윈도우 파워 쉘에서이 요청을 실행하면

내가 정확한 답변을 얻을 :

검색 - ADAccount -AccountExpiring -TimeSpan 30.00 : 00 : 00 | 여기서 {$ _. ObjectClass - eq 'user'} | FT 이름, ObjectClass -A

왜 내 ldapsearch에서 같은 결과가 나오지 않는지 설명해 주시겠습니까?

감사합니다.

답변

0

accountExpires 속성의 형식은 1601 년 1 월 1 일 (UTC) 이후 100 나노초 간격입니다. 속성에 대해서는 these details을 참조하십시오.

계정이 만료되는 날짜. 이 값은 1601 년 1 월 1 일 (UTC) 이후에 100 나노초 간격의 수를 나타냅니다. 값이 0 또는 0x7FFFFFFFFFFFFFFF (9223372036854775807)이면 계정 이 만료되지 않음을 나타냅니다.

따라서 AD로 보낼 올바른 값을 얻으려면 해당 형식으로 Linux/Unix 타임 스탬프를 포맷해야합니다.

# 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)) 
이 같은 (가난한 bash는 기술을 변명 ...) 수
관련 문제