Это не тот ответ, которого вы ждете, но я надеюсь, что он может помочь.
Первый ; Вы предполагаете, что ваш код работает в домене, но я не вижу, где он заботится о пользователе ' основная группа '. Если вы выберете группу в качестве ' основной группы пользователей ', эта группа больше не будет частью атрибута участника.
Второй ; В моем понимании, способ (я надеюсь, не единственный, но я все еще ищу), чтобы увидеть, если пользователь присутствует в группе, это ' рекурсивно ' искать DN пользователя в атрибуте member объектов group . Таким образом, в вашем случае вы можете спросить свой домен и другой домен. Вы можете сделать это, выполнив ОДИН поиск по домену. Вот пример такого ' рекурсивного поиска одного выстрела ' с использованием элемента управления:
/* Connection to Active Directory
*/
string sFromWhere = "LDAP://WIN-COMPUTER:389/";
DirectoryEntry deBase = new DirectoryEntry(sFromWhere, "dom\\user", "password");
/* To find all the groups that "user1" is a member of :
* Set the base to the groups container DN; for example root DN (dc=dom,dc=fr)
* Set the scope to subtree
* Use the following filter :
* (member:1.2.840.113556.1.4.1941:=cn=user1,cn=users,DC=x)
*/
DirectorySearcher dsLookFor = new DirectorySearcher(deBase);
dsLookFor.Filter = "(member:1.2.840.113556.1.4.1941:=CN=user1 Users,OU=MonOu,DC=dom,DC=fr)";
dsLookFor.SearchScope = SearchScope.Subtree;
dsLookFor.PropertiesToLoad.Add("cn");
SearchResultCollection srcGroups = dsLookFor.FindAll();
Примечание: например, вы можете использовать более точный фильтр для исключения групп рассылки.
Отредактировано (для ответов на вопросы комментариев):
Первый : нужны ли учетные данные? Я бы сказал, что нет, если запрос выполняется с компьютера, который принадлежит домену или утвержденному домену.
Второй и третий : Да, фильтры задокументированы Microsoft в Синтаксис фильтра поиска AD . То, как я написал этот фильтр, является вычетом из выборок.