Код программы UserInfo – часть 1

В первой части, публикую некоторые куски кода своей программы UserInfo, которые считаю ключевыми. Без их понимания я, как не программист, не мог программно получить доступ к Active Directory. Здесь будут два основных блока это:

  • Чтение атрибутов объекта из Active Directory
  • Запись атрибутов объекта в Active Directory

И так. все по порядку…

“Программирование” началось с изучения доступа к службе Active Directory:

В итоге стало понятно, для того чтобы найти нужный объект, необходимо выполнить предварительные операции:

  • Определить контекст Active Directory
  • Определить домен Active Directory
  • Определить куда и как мы будем подключаться к Active Directory
  • Выполнить поиск объекта

textBox1.Text  - поле ввода поисковых данных.
String typeSearch = null;

DirectoryContext DomainContext = new DirectoryContext(DirectoryContextType.Domain);
Domain DomainName = Domain.GetDomain(DomainContext);
DirectoryEntry ADEntry = new DirectoryEntry("LDAP://" + DomainName, null, null, AuthenticationTypes.Secure);
DirectorySearcher ADSearchUser = new DirectorySearcher(ADEntry);
ADSearchUser.Filter = "(&(objectClass=" + typeSearch + ")(objectCategory=Person)(|(displayName=" + textBox1.Text + "*)(mail=" + textBox1.Text + "*)))";
SearchResult result = ADSearchUser.FindOne();

дальше обрабатываем то, что находится в result. Я использовал массив User_atrib для того, чтобы было удобнее работать с результатом поиска в дальнейшем. Получаем данные следующим образом:

if (result != null) {
    try { User_atrib.Add(result.GetDirectoryEntry().Properties["sn"].Value.ToString()); }
    catch { User_atrib.Add(""); }
    …
}

На данный момент программа работает с 14 атрибутами пользователя или контакта.

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

Подключаемся к объекту в Active Directory:

DirectoryEntry UserEntry = new DirectoryEntry("LDAP://" + textBox14.Text, null, null, AuthenticationTypes.Secure);

textBox14.Text – поле типа label где храниться путь к объекту. Это поле мне иногда нужно, чтобы  знать в каком контейнере Active Directory находится объект.

Usr_att – массив данных собирается из полей, которые мы изменили

Все сохраняем:

if (Usr_att[0].ToString() != String.Empty) { UserEntry.Properties["sn"].Value = Usr_att[0].ToString(); }
else { UserEntry.Properties["sn"].Value = null; }

UserEntry.CommitChanges(); // применить изменения
UserEntry.RefreshCache(); // обновить данные об объекте

После окончания работы с объектом при поиске или сохранении атрибутов необходимо закрыть объекты и освободить ресурсы не дожидаясь мусорщика операционной системы.

UserEntry.Close();
UserEntry.Dispose();

В итоге получилась программа, которая сняла с ИТ рутинную работу без дополнительных затрат на программные продукты.

С какими атрибутами объекта работает программа:

sn

givenName

displayName

mail

l

streetAddress

company

department

title

physicalDeliveryOfficeName

telephoneNumber

drink

distinguishedname

userAccountControl

Не много об атрибуте drink.

После некоторого времени удачного использования программы пользователями, у них  появилось предложения о введении в нее дополнительного функционала. А именно, пожелание добавить к объекту пользователя дополнительный атрибут, в который заносилась бы информация о рабочих обязанностях пользователя. В программе я это поле назвал “Функции”, а в Active Directory выбрал атрибут drink.

Как я доставал этот объект и привязывал к объекту user. Открыл схему Active Directory. Нашел в атрибутах. Поставил галочки.

drink

Затем в Классе user добавил этот атрибут:

user

Все. На этом привязка нового атрибута к объекту user закончена.

P.S.

В скором будущем постараюсь описать как включаются/выключаются учетные записи, а также как происходит их блокировка/разблокировка.