Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить полный список доменных групп? 
:(
    Опции темы
Compositum
Дата 20.12.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Как получить полный список доменных групп, входящих в состав домена Active Directory?
Текущий домен получаю так:
Код

using ad = System.DirectoryServices.ActiveDirectory;
...
ad.Domain domain = ad.Domain.GetCurrentDomain();

Но в его свойствах/методах ничего не нашел со словом "Groups".
PM   Вверх
mihryak
Дата 21.12.2010, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 3
Всего: 36



фреймворк 3.5?
Код

            using (Domain currentDomain = Domain.GetCurrentDomain())
            using (PrincipalContext context = new PrincipalContext(ContextType.Domain, currentDomain.Name))
            using (Principal queryFilter = new GroupPrincipal(context))
            using (PrincipalSearcher searcher = new PrincipalSearcher(queryFilter))
            {
                foreach (GroupPrincipal group in searcher.FindAll())
                {
                    using (group)
                    {
                        Console.WriteLine(group.Name);
                    }
                }
            }

PM MAIL ICQ   Вверх
Compositum
Дата 21.12.2010, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Да, фрэймворк 3.5. Большое спасибо за решение! Предложенное вами решение более красиво чем то, которое я использую сейчас, вот текущий вариант:
Код

        /// <summary>
        /// Get all domain group names (sorted array) for current domain
        /// </summary>
        /// <returns>Domain groups names</returns>
        protected string[] GetDomainGroups() {            
            //Get current domain
            Domain domain = Domain.GetCurrentDomain();
            //How connecting
            DirectoryEntry myADEntry = new DirectoryEntry("LDAP://" + domain, null, null, AuthenticationTypes.Secure);
            //Where searching
            DirectorySearcher myADSearcher = new DirectorySearcher(myADEntry);
            //Searching filter
            myADSearcher.Filter = "(&(objectClass=group))";
            //get domain groups
            return myADSearcher.FindAll().Cast<SearchResult>().Select(n=>n.Path.Split(',')[0].Split('=')[1]).OrderBy(n=>n).ToArray();      
        }

прошу прощения за свой кривой английский... )))


Ещё раз спасибо!

п.с. Не знал, что можно из using целую цепочку создавать... )
PM   Вверх
Compositum
Дата 21.12.2010, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Ваш код можно немного подрихтовать, получится такой вариант (мне подсказали):

Код

        /// <summary>
        /// Get names of domain groups of the indicated domain
        /// </summary>
        /// <param name="DomainName">Domain name</param>
        /// <returns>Names of groups of the domain</returns>
        protected IEnumerable<string> GetDomainGroups(string DomainName) {
            using (var context = new PrincipalContext(ContextType.Domain, DomainName))
            using (var queryFilter = new GroupPrincipal(context))
            using (var searcher = new PrincipalSearcher(queryFilter)) {
                foreach (var result in searcher.FindAll()) {
                    yield return result.SamAccountName;
                    result.Dispose();
                }
            }
        }



Это сообщение отредактировал(а) Compositum - 21.12.2010, 16:09
PM   Вверх
mihryak
Дата 21.12.2010, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 3
Всего: 36



по-моему, использовать yield в таком случае - не самое удачное решение, теряется контроль за освобожением ресурсов, ведь перечисление будет жить, пока его не прибъёт сборщик мусора, а это случится чёрт знает когда, да и никто не обещает, что каждая итерация внешнего цикла будет выполняться быстро
лучше как можно быстрее забрать всю нужную информацию и освободить ресурсы, а уж потом начать обрабатывать данные

Это сообщение отредактировал(а) mihryak - 21.12.2010, 16:49
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0681 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.