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)))
我正在使用 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)))