我正在尝试查找所有将在30天内过期的帐户(来自Linux服务器,因此使用ldapsearch)。
以下是我发送给AD服务器的请求:
ldapsearch -x -h IP -D“[域名] [用户]” - w [密码] -b“DC = [DC],DC = [DC]” - s sub“(&(objectCategory = person) )(objectClass的=用户)(accountExpires> = 1)(accountExpires&LT = 30))“
我没有得到任何名字,因为所有帐户似乎都有一个0或2 ^ 63 -1的accountExpires。
当我从windows powershell(在Windows服务器上)启动此请求时,我得到了正确答案:
Search-ADAccount -AccountExpiring -TimeSpan 30.00:00:00 |其中{$ _.ObjectClass -eq'user'} | FT 名称,ObjectClass -A
你能解释一下为什么我的ldapsearch没有给出相同的结果吗?
谢谢!
答案 0 :(得分: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))