Active Directory 中的搜索过滤器无效

Invalid search Filter in Active Directory

我正在使用 DirectorySearcher 在 Active Directory 中发出 LDAP 请求,但由于过滤器无效,我一直抛出 ArgumentException。很可能是因为 Active Directory 中的 accountExpires 属性格式错误。我想使用 LDAP 查找所有过期的帐户,但如何将 DateTime.Now 格式转换为 accountExpires 格式?这就是我所做的,它引发了一个例外。如果我取出 accountExpires 属性,它不会产生任何问题:

search.Filter = "(&(objectCategory=person)"+
                   "(!(objectClass=contact))"+
                   "(accountExpires>0)"+
                   "(accountExpires<=129383640000000000)"+
                  ")";

我真的不知道如何将日期转换为 accountExpires 格式,我认为问题出在错误的日期格式上。

有什么想法吗?

那一定是字符串传递方式不当,尝试在每行后面加上双引号。

search.Filter = "(&(objectCategory=person)"+
                       "(objectClass!=contact)"+
                       "(accountExpires>0)"+
                       "(accountExpires<=129383640000000000)"+
                      ")";

您的过滤器似乎与 LDAP 过滤器语法不兼容,否定应该放在条件上,而不是作为条件:

(objectClass!=contact)应该写成:(!(objectClass=contact))

在我看来 accountExpires 条件的语法没有错,您的条件意味着该帐户设置了到期日期并且应该 "syntaxically" 有效。

如果您想要实现的是过滤具有到期日期且该日期不是 "never" 的帐户,您可以使用以下语法: (根据 ldapwiki.com/wiki/AccountExpires )

(!(|(accountExpires=0x7FFFFFFFFFFFFFFF)(accountExpires=0)))

(!(|(accountExpires=9223372036854775807)(accountExpires=0)))