2010-12-17 2 views
0

У меня есть следующий код для запроса AD с использованием DirectorySearcher, чтобы получить все группы AD для пользователя.Запрос AD для поиска всех групп пользователей - Отсутствует одна группа

 List<string> Groups = new List<string>(); 

     //initialize the directory entry object 
     DirectoryEntry dirEntry = new DirectoryEntry(ldapPath); 

     //directory searcher 
     DirectorySearcher dirSearcher = new DirectorySearcher(dirEntry); 

     //enter the filter 
     dirSearcher.Filter = string.Format("(&(objectClass=user)(sAMAccountName={0}))", username); 

     //get the member of properties for the search result 
     dirSearcher.PropertiesToLoad.Add("memberOf"); 
     int propCount; 
     SearchResult dirSearchResults = dirSearcher.FindOne(); 
     propCount = dirSearchResults.Properties["memberOf"].Count; 
     string dn; 
     int equalsIndex; 
     int commaIndex; 
     for (int i = 0; i <= propCount - 1; i++) 
     { 
      dn = dirSearchResults.Properties["memberOf"][i].ToString(); 

      equalsIndex = dn.IndexOf("=", 1); 
      commaIndex = dn.IndexOf(",", 1); 
      if (equalsIndex == -1) 
      { 
       return null; 
      } 
      if (!Groups.Contains(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1))) 
      { 
       Groups.Add(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1)); 
      } 
     } 

     return Groups; 

Но когда я проверить вкладку «memberof» в AD для пользователя Я одна дополнительная группа «Пользователи домена», который я не получаю через этот код.

Любые идеи? Почему я не получаю «Пользователи домена» в коллекции «memberof»?

+0

Может быть основан на конфигурации сервера, в которой вы находитесь, и это роль/функция, см. В части memberOf этой страницы http://msdn.microsoft.com/en-us/library/ms677943 – curtisk

+0

Okie. Я узнал отсюда: http://www.eggheadcafe.com/software/aspnet/30375857/directory-searcher-not-returning-all-groups.aspx, что memberOf не вернет первичные группы пользователей. Но я могу получить primaryGroupID, который дает RID (?) Группы, с помощью которой мне нужно получить группу AD. Есть идеи, как это сделать? – NLV

ответ

3

Группы могут быть членами других групп. Может быть, ваши пользователи не являются непосредственными членами, а только косвенными членами?

Я делаю повторение всех групп для дочерних групп при извлечении групп в AD.

Будьте предупреждены, что вы можете получить бесконечную рекурсию, так как группы могут (косвенно) содержать друг друга. Мне было трудно найти это :-(Теперь я помню каждую обработанную группу в «глобальном» списке, чтобы обрабатывать ее только один раз, чтобы этого избежать).

Я написал CodeProject article с некоторыми библиотеками общего назначения, которые также содержат классы AD. (См. Классы в подпапке «/Tools/DirectoryServices/» в загруженном ZIP-файле).

+0

Итак, как я могу найти его рекурсивно с помощью DirectorySearcher? – NLV

+0

Я добавил ссылку на мой ответ. –

+0

Okie. Я рекурсивный нашел родительские группы. Но все же две группы (или папки?) «Пользователи домена» не входят в список. Но если я проверяю вкладку «memberOf», она есть. Пользователи домена - это встроенная группа? Я что-то упустил? – NLV

Смежные вопросы