我是一家学习管理系统网站的管理员,该网站的页面结构存储在 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
。
允许使用通配符“*”,除非 (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*' }
-match
您还可以使用而不是 的完整正则表达式选项-like
。