没有办法询问对象是否具有“以外”的值,也没有办法询问具有超过 1 个值集的对象。
您也许可以从其他方式接近它:询问具有任何其他配置文件的对象:
(|(profile=P1)(profile=P2))
可能的另一种工作方式是使用>= 和<= 运算符。但是,这很棘手,因为它们包含相等性 - LDAP 中没有 > 或 < 运算符。这些比较是按字典顺序进行的(字符在 ASCII 图表中出现的顺序)。如果所有这些配置文件名称都以数字结尾,就像您的示例一样,这将容易得多。但否则会非常棘手。
例如,如果您知道所有配置文件都以数字结尾,并且您想查找配置文件不是 P0 的对象,您可以这样做:
(profile>=P00)
按字典顺序,每个数字都在00 之后。这是一个简单的示例,因为P0 将是您可以达到的最低值。但是,如果您想查找除 P5 之外的任何对象,那么您也必须有 <= 条件:
(|(profile<=P49)(profile>=P50))
如果您的个人资料是姓名且并非全部以数字结尾,则它会变得更棘手,但可能仍然可以做到。例如,如果您想查找配置文件不是PurpleProfile 的对象,那么这应该可以:
(|(profile<=purpleprofild~)(profile>=purpleprofile\20))
<= 条件将最后一个字符更改为前一个字符,并添加一个~,这是 ASCII 图表上最后一个可见字符。 >= 条件在末尾添加一个空格(转义),这是 ASCII 图表上的第一个可见字符。
此处的目标是确保您没有排除任何会在您在此处选择的值和您要排除的值之间排序的值。我使用Notepad++ 中的选项按字典顺序排序(突出显示所有内容,然后编辑-> 行操作-> 按字典顺序升序排序行)以使用各种值进行测试。您可能也必须这样做。
唯一的另一种方法是查询具有(profile=*) 设置的任何配置文件的对象,并在您获得结果后进行额外检查并丢弃您不想要的那些。但是,如果您经常这样做,这可能会损害您的应用程序的性能。