PowerShell AD LDS 查询和过滤器使用通配符未按预期运行

Mas*_*one 3 powershell ad-lds

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

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

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

Get-ADObject -Server 'localhost:389' -SearchBase 'CN=Academics,CN=Portal,O=Jenzabar,C=US' -Filter 'distinguishedName -like "*"'
Run Code Online (Sandbox Code Playgroud)

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

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"'
Run Code Online (Sandbox Code Playgroud)

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

Get-ADObject -Server 'localhost:389' -SearchBase 'CN=Academics,CN=Portal,O=Jenzabar,C=US' -Filter 'distinguishedName -like "C*"'
Run Code Online (Sandbox Code Playgroud)

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

jsc*_*ott 5

您不能在 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到过滤收集distinguishedName比赛CN=Jason*

Get-ADObject -Server $server -SearchBase $searchBase -Filter * |
  Where-Object { $_.distinguishedName -like 'CN=Jason*' }
Run Code Online (Sandbox Code Playgroud)

您还有一个完整的正则表达式选项,使用-match代替-like.