LDAP过滤器“> =”不适用于Active Directory中的连字符

时间:2019-05-03 11:01:56

标签: active-directory ldap

extensionattribute1个用户中有以下3个值:

  • -1000
  • -7
  • *中午* 12

此LDAP过滤器仅提取在extensionattribute1中具有第3个值的用户,

extensionattribute1 >= *Noon*12

AD执行词法搜索,它应该获取具有上述所有3个值的所有用户。

我们正在努力寻找导致此Active Directory行为的原因。请帮忙。

1 个答案:

答案 0 :(得分:0)

*字符是通配符。因此,如果您要将其用作文字(作为值中的实际*字符),则应对其进行转义:

extensionattribute1 >= \2ANoon\2A12

此处有更多详细信息:https://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx#Special_Characters

但是,我认为这不是您的问题。

在我能找到的任何文档中,都没有明确围绕“词汇语法”对AD意味着什么的规则。通常,它表示“字母顺序”。这对于文本来说很棒,但是对于符号的含义却完全不清楚。绝对不会总是使用它们在Unicode table中的位置。

我自己做了一些测试。正如您从Unicode表中的位置所期望的那样,它的确比逗号(.)高一个句点(,)。但是连字号(介于表中的句点和逗号之间)的排名似乎非常低。它总是少于一切。我可以搜索小于空格字符(<=\20)且与连字符匹配的值。

因此,简短的答案是您无法做您想做的事情。使用>=不会给您希望的结果。

但是,如果您只想查找这三个值,则可以使用“或”比较来查找所有这三个值:

(|(extensionattribute1=\2ANoon\2A12)(extensionattribute1=-1000)(extensionattribute1=-7))