С# - GroupPrincipal.Getmembers(true) не возвращает пользователей домена, какова альтернатива для этого?

GroupPrincipal.Getmembers(true) возвращает всех пользователей из вложенных групп, но не пользователей домена (которые являются основной группой). Можно ли как-то исправить это, чтобы мы могли получить всех пользователей, включая пользователей домена.

Я попробовал GroupPrincipal.Getmembers(false), но он не привлек всех пользователей, было бы полезно увидеть код для этого.

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

Посоветуйте что-нибудь по этому поводу, долго искал

Спасибо

here is the sample code

  using (var context1 = new PrincipalContext(ContextType.Domain, ""))
  {
    using (var group = GroupPrincipal.FindByIdentity(context1,"groupname"))

               {
                  if (group == null)
                 {

                 }
                  else
                  {
                      var users = group.GetMembers(true);
                       foreach (UserPrincipal user in users)
                       {
                          users.ToList().ForEach(sr => result.Add(sr.SamAccountName));
                         //user variable has the details about the user 
                    }
                 }
                }
            }​


person user2856757    schedule 14.08.2018    source источник
comment
Можете ли вы обновить пример кода, чтобы он показывал проблему с пользователями домена, которую вы пытаетесь решить?   -  person Brian Desmond    schedule 15.08.2018
comment
@BrianDesmond это код, который не извлекает пользователей домена, если пользователи домена находятся во вложенной группе, это именно та проблема, с которой я столкнулся social.msdn.microsoft.com/ Форумы/vstudio/en-US/   -  person user2856757    schedule 15.08.2018


Ответы (1)


Это работает по назначению. Пользователи домена не заполняются так же, как обычные группы, из-за некоторых устаревших особенностей AD в дни Windows 2000. Вложение пользователей домена в группу на самом деле не лучшая идея, учитывая широкий доступ, который она неявно предоставляет. Но если вы хотите найти этих участников, вам нужно искать пользователей по атрибуту primaryGroupID. Для пользователей домена следует установить значение 513.

person Brian Desmond    schedule 15.08.2018
comment
Да, это нехорошо, я понимаю, но я не могу это контролировать, поэтому не могли бы вы сказать, как добавить первичную группу? будет ли это другой блок кода, или он может быть встроен в него. Кроме того, поскольку у нас много пользователей, производительность сильно снижается, будем рады услышать ваши предложения, большое спасибо. Также, пожалуйста, приведите пример для primarygroupid, так как я не знаю об этом - person user2856757; 16.08.2018
comment
(&(objectCategory=person)(objectClass=user)(primaryGroupId=513)) — это фильтр LDAP для пользователей домена. Я думаю, вам нужно будет отступить, используя прямые запросы LDAP (например, с классом DirectorySearcher). - person Brian Desmond; 17.08.2018
comment
есть рабочий пример для справки? поскольку я не уверен, что понял это ясно, где я должен добавить эту часть в свой код? - person user2856757; 17.08.2018