Книга: C# для профессионалов. Том II

Создание новых объектов

Создание новых объектов

Новые объекты активного каталога, такие как пользователи, компьютеры, принтеры, контакты и другие программным путем можно создать с помощью класса DirectoryEntries.

Чтобы добавить новые объекты в каталог, мы должны сначала соединиться с объектом-контейнером, подобным организационной единице, куда можно вставить новые объекты. Объекты, которые не могут содержать другие объекты, использовать нельзя. Здесь используется контейнерный объект с известным именем CN=Users, DC=eichkogelstrasse, DC=local:

DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://celticrain/CN=Users, " +
 "DC=eichkogelstrasse, DC=local";

Можно получить доступ к объекту DirectoryEntries с помощью свойства Children объекта DirectoryEntry:

DirectoryEntries users = de.Children;

Объект DirectoryEntries имеет методы для добавления, удаления, и поиска объектов в коллекции. Здесь создается новый объект пользователя. Для метода Add() нам нужно имя объекта и имя типа. Можно легко получить имена типов с помощью ADSI Edit.

DirectoryEntry user = users.Add("John Doe", "user");

Объект теперь имеет значения свойств по умолчанию. Чтобы присвоить специальные значения свойств, можно добавить свойства с помощью метода Add() свойства Properties. Конечно, все свойства должны существовать в схеме для объекта пользователя. Если определенное свойство не существует, то возникнет исключение COMException "The specified directory service attribute or value doesn't exist" ("Указанный атрибут или значение службы каталога не существует"). Если имена атрибутов правильны, но сервер отказывает во входе в связи с незаконным паролем или пропущенным свойством, исключение COMException будет содержать сообщение "The server is unwilling to process the request" ("Сервер не желает обрабатывать запрос").

user.Properties["company"].Add("Some Company");
user.Properties["department"].Add("Sales");
user.properties["employeeID"].Add("4711");
user.Properties["samAccountName"].Add("John Doe");
user.Properties["userPassword"].Add("someSecret");

В данный момент не все данные записаны в активный каталог. Необходимо очистить кэш:

user.CommitChanges();

Оглавление книги


Генерация: 1.046. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз