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