Не удается отфильтровать подразделения, содержащие объекты компьютеров - PullRequest
0 голосов
/ 09 мая 2019

У меня есть приложение, написанное на c #, которое извлекает объекты верхнего уровня, такие как (OUs, Containers и т. Д.). Но фильтр, который я применил, также приносит OU & ​​Container, который содержит компьютерные объекты.Я хочу только объекты верхнего уровня, такие как OU, Containers, Groups, которые содержат только объекты пользователей, и пропускаем OU, которые содержат тип объектов компьютера.

У меня есть запрос фильтра ниже, но он не фильтрует OU & ​​Containerкоторый содержит объекты компьютеров.

(|(objectclass=domain)(objectclass=domainDNS)(objectclass=organization)(objectclass=organizationalunit)(objectclass=inetOrgPerson)(objectclass=group)(objectclass=groupOfNames)(&(objectclass=container)(!cn=computers)))

Я хочу получить только те подразделения, контейнеры и группы, в которых есть только пользовательские объекты, и пропустить все контейнеры подразделений, в которых есть объекты компьютеров.

1 Ответ

0 голосов
/ 10 мая 2019

Запросы LDAP ограничиваются просмотром атрибутов самого объекта. Поэтому иногда, если я не уверен, что можно запросить, я буду использовать AD Users and Computers, открывать свойства объекта (например, OU в данном случае) и заглядывать на вкладку Attribute Editor, чтобы увидеть, какие атрибуты и значения там, что я могу искать.

Если вы сделаете это для OU, вы увидите, что нет никаких атрибутов, которые бы указывали вам тип объектов в OU.

Таким образом, краткий ответ на ваш вопрос заключается в том, что вы не можете искать подразделения, контейнеры и группы, которые содержат только компьютерные объекты.

Сначала вам нужно будет найти все OU, контейнеры и группы с запросом типа:

(|(objectClass=organizationalUnit)(objectClass=container)(objectClass=group))

, а затем выполните отдельный поиск, чтобы определить, содержат ли они компьютерные объекты.

Если вы используете DirectorySearcher, вы можете установить для SearchRoot значение OU для поиска только одного OU. Тогда вы будете искать (objectClass=computer), чтобы найти внутри компьютерные объекты. Вы также можете установить SearchScope на OneLevel, чтобы найти только объекты, которые являются прямыми потомками этого подразделения.

Для групп вы можете выполнить поиск домена для членов компьютера этой группы, используя:

(&(memberOf=groupDN)(objectClass=computer))

, где groupDN - это distinguishedName группы.

...