在自定义搜索中使用 LDAP 查询的 Active Directory 查询
Active Directory Query using LDAP Query in custom search
我工作的域中的一些用户没有分配经理或没有职位,所以我尝试在 definequery>customsearch>advanced 选项卡中使用此 LDAP 查询创建一个新查询:
(&(objectCategory=user)(objectClass=user))(|(!manager=*)(!title=*)
这个 returns 零结果,即使我知道它们存在。使用自定义搜索会创建相同的搜索字符串以及 returns 零个结果。我根据其他地方的研究尝试了这个,结果也是 returns 零。
(&(objectCategory=person)(objectClass=user))(|(!manager=*)(!title=*)
我做错了什么?
另外我只想在特定文件夹及其子文件夹中搜索,我是否应该预先添加:
(|(OU=Innsbruck)(OU=Totnes)(OU=Dueren))
它们位于域的正下方,每个位置都有自己的计算机、组、用户子文件夹。
您的查询无效。 window 并没有告诉你 - 它只是给出零结果。
您缺少右括号,需要将 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。
在UI中,您可以点击右上角的'Browse'选择您要搜索的OU。
如果您是在代码中执行此操作,则可以执行一些操作以将其限制为特定 OU:
- 单独搜索每个 OU(如果需要,您可以选择将搜索范围设置为不搜索子 OU),或者
- 搜索整个域,然后查看每个结果的
distinguishedName
属性并丢弃不需要的 OU 的结果。
选项 #2 可能会执行得更快,因为它的网络请求较少。
在我看来,过滤器不符合 RFC 4515:搜索过滤器的 LDAP 字符串表示。
可能是 AD,您使用的工具正在接受它,但 NOT
过滤器应采用 (!(manager=*))
.
的形式
(&(objectCategory=person)(objectClass=user)(|(!(manager=*))(!(title=*))))
我工作的域中的一些用户没有分配经理或没有职位,所以我尝试在 definequery>customsearch>advanced 选项卡中使用此 LDAP 查询创建一个新查询:
(&(objectCategory=user)(objectClass=user))(|(!manager=*)(!title=*)
这个 returns 零结果,即使我知道它们存在。使用自定义搜索会创建相同的搜索字符串以及 returns 零个结果。我根据其他地方的研究尝试了这个,结果也是 returns 零。
(&(objectCategory=person)(objectClass=user))(|(!manager=*)(!title=*)
我做错了什么?
另外我只想在特定文件夹及其子文件夹中搜索,我是否应该预先添加:
(|(OU=Innsbruck)(OU=Totnes)(OU=Dueren))
它们位于域的正下方,每个位置都有自己的计算机、组、用户子文件夹。
您的查询无效。 window 并没有告诉你 - 它只是给出零结果。
您缺少右括号,需要将 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。
在UI中,您可以点击右上角的'Browse'选择您要搜索的OU。
如果您是在代码中执行此操作,则可以执行一些操作以将其限制为特定 OU:
- 单独搜索每个 OU(如果需要,您可以选择将搜索范围设置为不搜索子 OU),或者
- 搜索整个域,然后查看每个结果的
distinguishedName
属性并丢弃不需要的 OU 的结果。
选项 #2 可能会执行得更快,因为它的网络请求较少。
在我看来,过滤器不符合 RFC 4515:搜索过滤器的 LDAP 字符串表示。
可能是 AD,您使用的工具正在接受它,但 NOT
过滤器应采用 (!(manager=*))
.
(&(objectCategory=person)(objectClass=user)(|(!(manager=*))(!(title=*))))