使用通配符的筛选器的PowerShell AD LDS查询不按预期方式运行

我是一个学习pipe理系统网站的pipe理员,它的网页结构存储在AD LDS中。 我正在尝试运行查询来获取匹配的filterdistinguishedName的对象(网站上的网页)。 我的筛选器不像预期的那样运行。

以下是三个查询,除了filter参数外,其他所有的查询都是相同的。 这不正是我想要做的,但为了演示的目的,这将说明我的问题。

这工作(返回大量的结果):

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*"' 

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

您不能在DN属性(如distinguishedName上的LDAP筛选器中使用部分通配符。

来自Active Directory:LDAP语法filter

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

你的第一个例子distinguishedName -like "*"意思是“distinguishedName不是空的”,这就是为什么它返回结果。

而是使用Where-Object匹配LDAPfilter语法之外的属性。 以下内容将返回$searchBase$server所有AD对象,然后使用Where-Object过滤名称与CN=Jason*匹配的集合。

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

你也有一个完整的正则expression式选项使用-match而不是-match