Active Directory中的搜索过滤器无效

时间:2017-08-30 11:47:17

标签: c# asp.net-mvc active-directory ldap directoryservices

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

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

那一定是因为传递字符串的方式不正确,请尝试在每一行后关闭双引号。

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

答案 1 :(得分:1)

您的过滤器似乎与LDAP过滤器语法不兼容,应该将条件置于条件上,而不是条件:

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

我认为accountExpires条件的语法不正确,您的条件意味着该帐户设置了过期日期,并且应该“具有语法”效果。

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

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

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