Фильтр LDAP для членов Группа

Я пытаюсь запустить фильтр LDAP, чтобы вернуть всех пользователей в группе. Довольно просто, и есть сотни вопросов о переполнении стека, которые уже содержат примеры запросов. Однако тот, который я использую, является базовым и ничего не возвращает при запуске в Powershell.

Что я пробовал

Get-ADUser -LDAPFilter "(&(objectclass=user)(objectcategory=person)(memberOf=CN=MyGroup,OU=Users,DC=MyDomain,DC=com))"

Я также пробовал "CN = Users" вместо "OU = Users

Where" MyGroup »находится в OU:

« MyDomain » (Forest) >« Users » (OU) >« MyGroup » (CN)

Любой идеи, что я делаю неправильно, и почему ни один из 100-200 членов «MyGroup» не возвращается?

2
задан 7 August 2019 в 20:08
2 ответа

Первое, что я сделаю, это перепроверьте что DN группы, которую вы пытаетесь сопоставить, действительно правильный. Обычно я делаю что-то вроде этого:

(Get-ADGroup MyGroup).distinguishedName

# optionally, save it to a variable
$groupDN = (Get-ADGroup MyGroup).distinguishedName

Get-ADUser ограничит ваши результаты только пользовательскими объектами, поэтому вы можете не включать части objectclass / objectcategory фильтра LDAP и просто включать часть memberOf. Вы можете использовать переменную DN, которую мы установили ранее, следующим образом:

Get-ADUser -LDAPFilter "(memberOf=$groupDN)"

Важно отметить, что в этом конкретном запросе будут возвращаться только пользователи, которые являются прямыми членами группы. Он не вернет вложенные члены. Таким образом, если один из членов группы является другой группой, члены этой второй группы не будут отображаться в результатах без дополнительных усилий. Вы можете получить эти вложенные элементы, настроив фильтр следующим образом:

Get-ADUser -LDAPFilter "(memberOf:1.2.840.113556.1.4.1941:=$groupDN)"

Это сумасшедшее число с точками посередине - это OID с именем LDAP_MATCHING_RULE_IN_CHAIN ​​. Из документации:

LDAP_MATCHING_RULE_IN_CHAIN ​​- это OID правила сопоставления, который предназначен для предоставления метода для поиска происхождения объекта. Многие приложения, использующие AD и AD LDS, обычно работают с иерархическими данными, которые упорядочены отношениями родитель-потомок. Раньше приложения выполняли транзитивное расширение группы для определения членства в группе, которое использовало слишком большую пропускную способность сети; приложениям необходимо было совершить несколько обходов, чтобы выяснить, упал ли объект «в цепочку», если ссылка пройдена до конца.

Другая причина, по которой ваш запрос может не возвращать результаты, - это то, что пользователь, которого вы выполняете, поскольку по какой-то причине не имеет доступа на чтение для некоторых / всех пользователей.

1
ответ дан 3 December 2019 в 12:29

Get-ADUser -свойства членов -фильтра * | где -свойства членов -контейнеров ("CN=MyGroup,OU=Users,DC=MyDomain,DC=com")

0
ответ дан 3 December 2019 в 12:29

Теги

Похожие вопросы