我正在工作的域中的某些用户没有分配经理或职位名称,因此我尝试在definequery> customsearch> advanced标签中使用此LDAP查询创建一个新查询:
(&(objectCategory=user)(objectClass=user))(|(!manager=*)(!title=*)
即使我知道它们存在,它也会返回零结果。使用“自定义搜索”将创建相同的搜索字符串,并返回零结果。我根据其他地方的研究进行了尝试,该结果也返回零。
(&(objectCategory=person)(objectClass=user))(|(!manager=*)(!title=*)
我在做什么错了?
我也想只在特定的文件夹及其子文件夹中进行搜索,
(|(OU=Innsbruck)(OU=Totnes)(OU=Dueren))
这些位于域的正下方,并且每个位置都有自己的计算机,组和用户子文件夹。
答案 0 :(得分:1)
您的查询是无效的。该窗口不会告诉您-它只会给出零结果。
您缺少右括号,需要将OR条件置于AND条件内。而且您还需要使用(objectCategory=person)
,而不是(objectCategory=user)
。您实际上并不需要(objectCategory=person)
,因为(objectClass=user)
足以将搜索限制在用户对象之内,但这并不有害。
它应该是这样的:
(&(objectCategory=person)(objectClass=user)(|(!manager=*)(!title=*)))
我通常会将查询粘贴到Notepad++中,突出显示匹配的括号,因此很容易找到丢失的括号。或者,您可以将其分解为多行,以使其更易于阅读和发现错误:
(&
(objectCategory=person)
(objectClass=user)
(|
(!manager=*)
(!title=*)
)
)
无论您如何搜索(通过“用户和计算机” UI或通过代码),一次只能搜索一个OU。没有OU
属性或可在查询中使用的任何其他属性来限制特定的OU。
在用户界面中,您可以单击右上角的“浏览”以选择要搜索的OU。
如果您在代码中执行此操作,则可以做一些事情以将其限制为特定的OU:
distinguishedName
属性,并从不需要的OU中丢弃结果。选项2可能会执行得更快,因为它减少了网络请求。
答案 1 :(得分:1)
在我看来,该过滤器不符合RFC 4515:搜索过滤器的LDAP字符串表示形式。
可能是AD,并且您使用的工具正在接受它,但是NOT
过滤器应采用(!(manager=*))
的形式。
(&(objectCategory=person)(objectClass=user)(|(!(manager=*))(!(title=*))))