使用通配符进行筛选的 PowerShell AD LDS 查询未按预期运行

使用通配符进行筛选的 PowerShell AD LDS 查询未按预期运行

我是一家学习管理系统网站的管理员,该网站的页面结构存储在 AD LDS 中。我尝试运行查询以获取与 distinguishedName 过滤器匹配的对象(网站上的页面)。我的过滤器没有按预期运行。

下面是三个查询,除了过滤参数外,其余都相同。这并不是我想要做的,但出于演示目的,这将说明我的问题。

这有效(返回大量结果):

Get-ADObject -Server 'localhost:389' -SearchBase 'CN=Academics,CN=Portal,O=Jenzabar,C=US' -Filter 'distinguishedName -like "*"'

这也有效,(返回单个结果):

Get-ADObject -Server 'localhost:389' -SearchBase 'CN=Academics,CN=Portal,O=Jenzabar,C=US' -Filter 'distinguishedName -like "CN=LEC,CN=Academics,CN=Portal,O=Jenzabar,C=US"'

但是,这没有返回任何结果,而且我不明白为什么:

Get-ADObject -Server 'localhost:389' -SearchBase 'CN=Academics,CN=Portal,O=Jenzabar,C=US' -Filter 'distinguishedName -like "C*"'

据我所知,第三个查询应该返回第一个查询的所有结果,并且至少应该返回第二个查询的单个结果。如能得到任何帮助,我将不胜感激!

答案1

您不能在 LDAP 过滤器中的 DN 属性上使用部分通配符,例如distinguishedName

Active Directory:LDAP 语法过滤器

允许使用通配符“*”,除非 (AD 属性) 是 DN 属性。DN 属性的示例包括 distinguishedName、manager、directReports、member 和 memberOf。如果属性是 DN,则只允许使用等式运算符,并且必须为该值指定完整的可分辨名称(或为所有具有该属性的任何值的对象指定 * 字符)。

您的第一个例子distinguishedName -like "*"意味着“distinguishedName 不为空”,这就是它返回结果的原因。

而是使用Where-Object来匹配 LDAP 过滤器语法之外的属性。下面返回 下的所有 AD 对象,$server然后$searchBase使用来过滤匹配的Where-Object集合。distinguishedNameCN=Jason*

Get-ADObject -Server $server -SearchBase $searchBase -Filter * |
  Where-Object { $_.distinguishedName -like 'CN=Jason*' }

-match您还可以使用而不是 的完整正则表达式选项-like

相关内容