Как получить каждую родительскую группу группы Active Directory - PullRequest
1 голос
/ 15 октября 2019

У меня есть Active Directory с несколькими группами, уровнями подгрупп, а затем с пользователями в этих подгруппах.

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

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

IADsUser *user_object = NULL;
IADsMembers *members;

// ...
// Get object via ADsGetObject
// ...

// Provides me with a list of groups that the user belongs to
user_object->Groups(&members); 

Класс IADsGroup не содержит функцию Groups (), поэтому я не могу понять, как получить список групп, которыегруппа принадлежит.

1 Ответ

1 голос
/ 15 октября 2019

Вы можете прочитать атрибут memberOf группы, используя IADs::GetEx.

Если у вас есть IADsGroup group_object:

HRESULT hr;
VARIANT groups;
VariantInit(&groups);
hr = group_object->GetEx(CComBSTR("memberOf"), &groups);

Переменная groups теперь будет массивом VARIANT, содержащим distinguishedName всех групп. Если вы хотите получить понятное имя для каждой из них, то вам необходимо привязать к каждой группе (используя ADsGetObject), чтобы получить объект IADsGroup для этой группы.

Атрибут memberOfЕсть некоторые предостережения, о которых вы должны знать, о которых я писал здесь , но если вы находитесь в однодоменной среде без внешних доверенных доменов, то это не должно иметь для вас значения.

Обратите внимание, что возвращаемое значение hr может быть E_ADS_PROPERTY_NOT_FOUND, если оно не является членом каких-либо других групп. Active Directory в целом обрабатывает пустые атрибуты как несуществующие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...