powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получить список и параметры ВСЕХ пользователей ActiveDirectory (AccountManager)
8 сообщений из 8, страница 1 из 1
Получить список и параметры ВСЕХ пользователей ActiveDirectory (AccountManager)
    #38559874
master_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, не так давно вы мне очень здорово помогли в вопросе нахождения параметров учетки домена, по её имени:
http://www.sql.ru/forum/1069276/directoryservices-accountmanagement-vyvod-atributov-uchetki-po-imeni-uchetki-gde-durak

результатом чего стал следующий код
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
        //метод берущий контекст текущего домена по указанному юзеру
        public static UserPrincipal GetUser(string sUserName)
        {
            PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain);
            return UserPrincipal.FindByIdentity(oPrincipalContext, IdentityType.SamAccountName, sUserName);
        }

        string DispName = "";
        string email = "";
        string lastlog = "";
        string tel = "";

        public void GetUserInfo(string usr)
        {
            UserPrincipal UP = GetUser(usr);
            DispName = UP.DisplayName;
            email = UP.EmailAddress;
            tel = UP.VoiceTelephoneNumber;
            
            if (UP.LastLogon.HasValue)
                lastlog = UP.LastLogon.Value.ToString();
            else
                lastlog = "";
        }



Мне все очень нравится, но чего-то теряюсь в выполнении следующей задачи:
Я хочу получить список всех логинов домена c параметрами, я понимаю что это не должно быть сложно, но не могу догадаться как, хоть убей.
подскажите plz
...
Рейтинг: 0 / 0
Получить список и параметры ВСЕХ пользователей ActiveDirectory (AccountManager)
    #38560015
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пролема в том, чтобы найти всех пользователей домена? Это можно сделать так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
using (var ds = new DirectorySearcher("(&(objectClass=person)(objectClass=organizationalPerson)(objectClass=user))"))
{
  ds.CacheResults = true;
  ds.PageSize = 1000;
  foreach (SearchResult item in ds.FindAll())
  {
    using (var de = item.GetDirectoryEntry())
    {
      ..........
    }
  }
}


Далее, там, где многоточие, можно:
1) просмотреть все свойства DirectoryEntry:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
var pc = de.Properties;
foreach (PropertyValueCollection pvc in pc)
{
  Console.WriteLine("{0}:",pvc.PropertyName);
  foreach (var o in pvc)
    Console.WriteLine("\t{0}",o.ToString());
}
Console.WriteLine("==================================================");


2) из DirectoryEntry.Properties получить sAMAccountName, по нему через UserPrincipal.FindByIdentity получить экземпляр UserPrincipal, свойства брать у него.
...
Рейтинг: 0 / 0
Получить список и параметры ВСЕХ пользователей ActiveDirectory (AccountManager)
    #38560533
master_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Благодарю! Буду пробовать
...
Рейтинг: 0 / 0
Получить список и параметры ВСЕХ пользователей ActiveDirectory (AccountManager)
    #38561411
master_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Спасибо ещё раз, первый способ вообще бомба! выдает все что надо и не надо :)
поскольку мне надо было пробежаться именно по свойствам аккаунтов юзеров, остановился пока на таком варианте для себя:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
        PrincipalContext oPrincipalContext;
        public SEP()
        {
            InitializeComponent();
            CenterToScreen();
            //взял контекст текущего домена
            oPrincipalContext = new PrincipalContext(ContextType.Domain);
        }        
 
        string account;
        UserPrincipal UP;
        private void B_take_Click(object sender, EventArgs e)
        {
            using (var ds = new DirectorySearcher("(&(objectClass=person)(objectClass=organizationalPerson)(objectClass=user))"))
            {
                ds.CacheResults = true;
                ds.PageSize = 1000;
                foreach (SearchResult item in ds.FindAll())
                {
                    using (var de = item.GetDirectoryEntry())
                    {
                        //sAMAccountType   805306368 - логин, 805306369 - комп
                        var pc = de.Properties;
                        account = "";

                        foreach (PropertyValueCollection pvc in pc)
                        {
                            //добавил имя и тип аккаунта в строковую переменную
                            if (pvc.PropertyName == "sAMAccountType" || pvc.PropertyName == "sAMAccountName")
                            {
                                account += pvc.Value.ToString();
                            }                            
                        }

                        //смотрю свойства только тех аккаунтов, тип которых - логин
                        if (account.Contains("805306368"))
                        {
                            UP = UserPrincipal.FindByIdentity(oPrincipalContext, 
                                IdentityType.SamAccountName, account.Replace("805306368", ""));

                            MessageBox.Show(UP.DisplayName);
                        }
                    }
                }
            }            
        }


полюбому код - ламерство полное, но работает.
Подскажите: вот про это
Код: c#
1.
ds.PageSize = 1000;

я поMSDNил, но ввиду малого опыта, нифига не понял:
Получает или задает значение, указывающее размер страницы при поиске с постраничным выводом.
влияет ли данный параметр на какие либо ограничения, просто в домене одних юзеров будет тысяч пятьдесят и ещё кучу всего остального, пострадает ли мой проход при данном значении параметра?
...
Рейтинг: 0 / 0
Получить список и параметры ВСЕХ пользователей ActiveDirectory (AccountManager)
    #38561695
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
master_sqlПодскажите: вот про это
Код: c#
1.
ds.PageSize = 1000;


У PageSize значение по умолчанию - 0, и в этом случае размер выборки, возвращаемой методом FindAll, будет ограничен значением свойства SizeLimit, который по умолчанию тоже 0, и поэтому будет возвращено макс. количество, отдаваемое контроллером AD - 1000 элементов. Если PageSize>0, то будет использована постраничная выдача, в которой будет всё, что нашлось. При маленьком PageSize возврат очередой порции будет происходить быстрее, но будет больше обращений к контроллеру AD, при большом значении PageSize возврат очередой порции будет происходить медленнее, но будет меньше обращений к контроллеру AD - эмпирически кем-то как-то было подобрано значение, равное 1000.
...
Рейтинг: 0 / 0
Получить список и параметры ВСЕХ пользователей ActiveDirectory (AccountManager)
    #38561698
master_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,
Благодарю! Вы помогаете мне уже не первый раз за этот год, большое спасибо!
...
Рейтинг: 0 / 0
Получить список и параметры ВСЕХ пользователей ActiveDirectory (AccountManager)
    #38561699
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
master_sql
Код: c#
1.
//sAMAccountType   805306368 - логин, 805306369 - комп


Странно, как в вашем домене компы могли попасть в objectClass=organizationalPerson и objectClass=user. Но раз уж идет фильтрация по sAMAccountType, то и задавать её надо в фильтре для DirectorySearcher -
Код: c#
1.
using (var ds = new DirectorySearcher("(sAMAccountType=805306368)"))


см. http://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx
...
Рейтинг: 0 / 0
Получить список и параметры ВСЕХ пользователей ActiveDirectory (AccountManager)
    #38561716
master_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

я хоть имею мало опыта работы AD (я вообще ИТ-руководитель среднего звена и занимаюсь псевдо-программированием вечерами только от того что меня тошнит от того, что когда ты руководитель, ты теряешь все компетенции, так что прошу делать скидку что я занимаюсь далегко не профильными вещами :) )
мне это тоже показалось весьма странным. Но домен от меня далеко, ибо я во Владивостоке, а он в Москве :) и идеологи его в Москве, а я всего лишь на месте пытаюсь создать удобную базу с компьютерами на основе данных Semantec, Altiris и AD.

Спасибо что дали мне ссылку на Active Directory: LDAP Syntax Filters, очень полезно будет.

Так же, просмотрев внимательно свойства одной директории с юзером, я понял, что впринципе брать UserPrincipal это достаточно избыточно, поскольку все данные типа имени, мэйла, телефона и прочих мест работы итак есть в свойствах директории. Так что можно взять все оттуда, не плодя лишних сущностей.

не устаю говорить вам спасибо!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получить список и параметры ВСЕХ пользователей ActiveDirectory (AccountManager)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]