Запрос PowerShell AD LDS с фильтром с использованием подстановочного знака не работает должным образом
Я администратор веб-сайта системы управления обучением, который сохраняет структуру страниц в AD LDS. Я пытаюсь выполнить запрос, чтобы получить объекты (страницы на сайте), которые соответствуют фильтру для,450. Мой фильтр работает не так, как ожидалось.
Ниже приведены три запроса, каждый из которых идентичен, за исключением параметра фильтра. Это не совсем то, что я пытаюсь сделать, но в демонстрационных целях это проиллюстрирует мою проблему.
Это работает (возвращает очень большое количество результатов):
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 являются отличимые имя, менеджер, directReports, member и memberOf. Если атрибутом является DN, то разрешен только оператор равенства, и вы должны указать полное различающееся имя для значения (или символ * для всех объектов с любым значением для атрибута).
Ваш первый пример distinguishedName -like "*"
означает "отличительное имя не пустое", поэтому возвращает результаты.
Вместо этого используйте 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
,