Модераторы: bartram, Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неправильная выборка из Active Directory, Неправильная выборка из Active Directory 
:(
    Опции темы
eon
Дата 15.11.2010, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Себя к админам не отношу. Работаю кодером.
При попытке выборки информации о пользователях из AD возникли проблемы.
Вот код выборки:
Код

textBox1.Text = "";
            String FML = "";  // здесь будем хранить инициалы
            String OU = "";    // а здесь отдел
            /* Соединяемся с Active Directory */
            DirectoryEntry entry = new DirectoryEntry("LDAP://blablabla.ru", @"domain\login", "pass");
            /* Создаем обьект для поиска */
            DirectorySearcher mySearcher = new DirectorySearcher(entry);
            /* Сортировка по убыванию */
            mySearcher.Sort = new SortOption("displayName", SortDirection.Ascending);
            /* Проходимся по всех найденных обьектах */
            foreach (SearchResult resEnt in mySearcher.FindAll())
            {
                /* Получаем DirectoryEntry для каждого обьекта AD */
                DirectoryEntry de = resEnt.GetDirectoryEntry();
                /* Если пользователь имеет имя... */
                if (de.Properties["displayName"].Value != null)
                {
                    /* ...начинаем просмотр всех групп */
                    for (int i = 0; i < de.Properties["MemberOf"].Count; i++)
                    {
                            /* Извлекаем Фамилию и инициалы */
                            FML = de.Properties["displayName"].Value.ToString();
                            /* А теперь извлекаем OU(отдел) пользователя*/
                            OU = de.Parent.Path.ToString();
                            /* Выводим искомую информацию в форматированном виде. */
                            textBox1.Text += String.Format("{0}\t{1}", FML, OU) + "\r\n" + de.Properties["MemberOf"][i] + "\r\n ---------------------------------------- \r\n";
                        }
                    }
                }
            }

Предположим, нашли объект с непустым именем (допустим нашего сисадмина), далее /* ...начинаем просмотр всех групп */:
и на строке: for (int i = 0; i < de.Properties["MemberOf"].Count; i++)
свотрю в watch'ах de.Properties["MemberOf"].Count = 4.
Подхожу к нему, он мне показывает, что состоит в ПЯТИ группах. А у меня выборка выдает что в ЧЕТЫРЕХ группах.
Если смотреть мою учетку, то выводится правильно: две группы.
Одна из групп "Пользователи домена". Вот не показывается эта группа у многих учеток, а в ней состоят ВСЕ. Я показываюсь, кто-то не показывается. В чем может быть дело? Наш сисадмин не знает, все абсолютно одинаково входят в эту группу. 
PS: простите если не правильно как-то написал. Ну думаю, кто-нибудь меня поймет.
PM MAIL   Вверх
mihryak
Дата 15.11.2010, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Domain Users - "особая" группа, членство в ней через ldap-запросы высчитывается немного иначе
Для работы с юзерами-группами во фрейморке 3.0 появились удобные классы пространства имён System.DirectoryServices.AccountManagement из одноимённой сборки
Вот так можно перечислить всех юзеров домена текущего пользователя и все их группы:
Код

    using (PrincipalContext userContext = new PrincipalContext(ContextType.Domain, Environment.UserDomainName))
    using (UserPrincipal queryFilter = new UserPrincipal(userContext))
    using (PrincipalSearcher principalSearcher = new PrincipalSearcher(queryFilter))
    {
        foreach (var userPrincipal in principalSearcher.FindAll())
        {
            using (userPrincipal)
            {
                Console.WriteLine("User: {0}. Groups: {1}.", userPrincipal.Name,
                    string.Join(", ", userPrincipal.GetGroups().Select(group => group.Name).ToArray()));
            }
        }
    }


Это сообщение отредактировал(а) mihryak - 15.11.2010, 19:58
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Windows"
December
bartram
Akella

Запрещается!

1. Обсуждать взлом и делиться кряками

2. Способствовать созданию и распространению вирусов

  • Для бессмертных бородатых вопросов типа Win vs Nix есть специальный форум Религиозные Войны
  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • ВСЕГДА УКАЗЫВАЙТЕ ВЕРСИЮ ОС

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

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


 




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


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

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