Active Directory上的LDAP搜索
问题描述:
我正在尝试请求查找将在30天内(从Linux服务器并因此使用ldapsearch)过期的所有帐户。Active Directory上的LDAP搜索
这里是我发送到AD服务器的请求:
ldapsearch的-x -h IP -D “[域] [用户]” -w [口令] -b“DC = [DC],DC = [DC]“-s sub”(objectCategory = person)(objectClass = user)似乎有一个accountExpires是0或2^63 -1。
当我启动从Windows PowerShell中该请求(在Windows服务器上),我得到正确的答案:
搜索-ADAccount -AccountExpiring -TimeSpan 30.00:00:00 |其中{$ _。ObjectClass -eq'user'} | FT Name,ObjectClass -A
你能解释一下为什么我的ldapsearch不能给出相同的结果吗?
谢谢!
答
accountExpires
属性的格式是自1601年1月1日(UTC)以来的100纳秒间隔的数量。有关属性,请参见these details:
帐户到期的日期。该值表示自1601年1月1日(UTC)起的 100纳秒间隔的数量。值为0或 0x7FFFFFFFFFFFFFFF(9223372036854775807)表示帐户 永不过期。
因此,您需要将Linux/Unix时间戳格式化为该格式才能获得发送给AD的正确值。这可能是这样的(原谅可怜的bash技能...):
# 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))