组合 LDAP 查询未给出正确的结果

问题描述 投票:0回答:1

大家下午好。

我正在尝试对域控制器运行 LDAP 查询以包含具有以下要求的服务器:

OperatingSystem=*server*
(包括所有服务器)

OperatingSystem=*Enterprise*
(包括 Windows 10 计算机)

并且

userAccountControl:1.2.840.113556.1.4.803:=2
(机器未禁用)

如果我运行以下命令,我就会得到服务器所需的内容:

Get-ADObject -searchbase "DC=DOMAIN,DC=LOCAL" -ldapfilter "(&(objectclass=computer)(operatingSystem=*server*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" | Sort-Object Name

如果我运行以下命令,我将获得 Windows 10 Enterprise Box 所需的内容:

Get-ADObject -searchbase "DC=DOMAIN,DC=LOCAL" -ldapfilter "(&(objectclass=computer)(operatingSystem=*Enterprise*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" | Sort-Object Name

但是,如果我像这样组合,我什么也得不到:

Get-ADObject -searchbase "DC=DOMAIN,DC=LOCAL" -ldapfilter "(&(objectclass=computer)(operatingSystem=*server*)(|(operatingSystem=*Enterprise*))(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" | Sort-Object Name

我也尝试过这个:

Get-ADObject -searchbase "DC=DOMAIN,DC=LOCAL" -ldapfilter "(&(objectclass=computer)(operatingSystem=*server*)(operatingSystem=*Enterprise*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" | Sort-Object Name

我可能错过了什么?

powershell active-directory ldap ldap-query
1个回答
0
投票

您的倒数第二个过滤器几乎是正确的,以使其更具可读性:

(&
  (objectclass=computer)
  (|
      (operatingSystem=*server*)
  )
  (operatingSystem=*Enterprise*)  # <- this one should be inside the OR clause
  (!(userAccountControl:1.2.840.113556.1.4.803:=2))
)

所以,过滤器应该是:

(&(objectclass=computer)(|(operatingSystem=*server*)(operatingSystem=*Enterprise*))(!userAccountControl:1.2.840.113556.1.4.803:=2))

您可以注意到,

(!(userAccountControl:1.2.840.113556.1.4.803:=2))
也可以简化为
(!userAccountControl:1.2.840.113556.1.4.803:=2)
。而且,如果您使用
Get-ADComputer
而不是
Get-ADObject
,则可以去掉
(objectclass=computer)
子句。

© www.soinside.com 2019 - 2024. All rights reserved.