2017-01-18 160 views
1

我正在尝试请求查找将在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不能给出相同的结果吗?

谢谢!

回答

0

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))