Получение списка пользователей косвенно члены AD группы через LDAP

У меня есть определенная проблема с поиском LDAP, который должен указать, является ли пользователь членом данной AD группы или не (рекурсивно).

В основном то, что я делаю, является проблемой поиск LDAP со следующими параметрами:

get-aduser -LDAPFilter "(memberof:1.2.840.113556.1.4.1941:={group LDAP path})" -SearchBase "{AD LDAP base}"

Это действительно приводит к ожидаемому результату: вместо того, чтобы получить всех пользователей, которые являются прямо или косвенно членами группы, которую я ищу, я получаю всех прямых членов той группы плюс случайный выбор косвенных участников (члены групп, которые являются членом разыскиваемого группа).

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

(Я должен решить эту проблему с поиском LDAP, потому что результат будет использоваться в приложении, не через powershell. Но с помощью powershell таким образом, я могу воспроизвести исходную проблему в описанном пути).

1
задан 18 September 2014 в 12:44
2 ответа

Используйте Get-ADGroupMember с переключателем -Recursive, чтобы получить список всех членов, не содержащих дочерних объектов. Это позволит перейти к членам, у которых есть дочерний объект, чтобы получить своих членов.

Пример

$groupName = "Domain Admins"
$group = Get-ADGroup $groupName
$groupMembers = Get-ADGroupMember $group -Recursive

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

1
ответ дан 4 December 2019 в 00:18

Получаете ли вы тот же результат с помощью get-adobject (вместо get-aduser)?
Или попробуйте использовать объект .NET Directory Searcher

$rootDSE = [adsi]"LDAP://RootDSE"
$dnDomain = $rootDSE.defaultNamingContext
$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$search.searchroot = [adsi]"LDAP://$dnDomain"
$search.Filter = "(&(objectClass=user)(memberof:1.2.840.113556.1.4.1941:={group LDAP path}))"
$search.findAll()
0
ответ дан 4 December 2019 в 00:18

Теги

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