Получать членов группы Active Directory рекурсивно, то есть включая подгруппы

Для такой группы в Active Directory:

MainGroup
  GroupA
    User1
    User2
  GroupB
    User3
  User4

Я могу легко определить, является ли User3 членом MainGroup или любой из его подгрупп с кодом, подобным этому:

using System;
using System.DirectoryServices;

static class Program {
    static void Main() {
        DirectoryEntry user = new DirectoryEntry("LDAP://CN=User3,DC=X,DC=y");
        string filter = "(memberOf:1.2.840.113556.1.4.1941:=CN=MainGroup,DC=X,DC=y");
        DirectorySearcher searcher = new DirectorySearcher(user, filter);
        searcher.SearchScope = SearchScope.Subtree;
        var r = searcher.FindOne();
        bool isMember = (r != null);
    }
}

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

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

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

Каков наилучший способ получить всех членов группы, включая ее подгруппы?

Ответы на вопрос(2)

Ваш ответ на вопрос