我正在使用DirectorySearcher
在Active Directory中发出LDAP请求,但由于过滤器无效,我仍然会抛出ArgumentException
。很可能是因为Active Directory中的accountExpires
属性格式错误。我想使用LDAP查找所有已过期的帐户,但如何将DateTime.Now
转换为accountExpires
格式?这就是我所做的,它引发了一个例外。如果我取出accountExpires属性,它不会产生任何问题:
search.Filter = "(&(objectCategory=person)"+
"(!(objectClass=contact))"+
"(accountExpires>0)"+
"(accountExpires<=129383640000000000)"+
")";
我真的不知道如何将日期转换为accountExpires
格式,我认为问题来自错误的日期格式。
有什么想法吗?
答案 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)))