Запрос 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,

Другие вопросы по тегам