在自定义搜索中使用 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:

  1. 单独搜索每个 OU(如果需要,您可以选择将搜索范围设置为不搜索子 OU),或者
  2. 搜索整个域,然后查看每个结果的 distinguishedName 属性并丢弃不需要的 OU 的结果。

选项 #2 可能会执行得更快,因为它的网络请求较少。

在我看来,过滤器不符合 RFC 4515:搜索过滤器的 LDAP 字符串表示。 可能是 AD,您使用的工具正在接受它,但 NOT 过滤器应采用 (!(manager=*)).

的形式

(&(objectCategory=person)(objectClass=user)(|(!(manager=*))(!(title=*))))