специфические значения из коллекции свойства:

using (DirectoryEntry de = new DirectoryEntry!)) {

 de.Path =

  'LDAP://celticrain/CN=Christian Nagel, ' +

  'OU=Wrox Press, DC=eichkogelstrasse, DC=local';

 if (de.Properties.Contains('mobile')) {

  de.Properties['mobile'][0] = '+43 (664) 3434343434';

 }

 de.CommitChanges();

}

Чтобы изменить значение, зададим ему определенное значение. Посредством следующей строки кода для номера мобильного телефона задается новое значение, если оно существует, с использованием индекса PropertyValueCollection. С помощью индекса значение может только изменяться. Поэтому необходимо всегда проверять методом DirectoryEntry.Properties.Contains(), доступен ли атрибут:

de.Properties['mobile'][0] = '+43 (664) 3434343434';

He забудьте вызвать метод DirectoryEntry.CommitChanges() после создания или обновления новых объектов каталога. Иначе обновляется только кэш, а изменения не посылаются службе каталога.

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

Новые объекты активного каталога, такие как пользователи, компьютеры, принтеры, контакты и другие программным путем можно создать с помощью класса 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();

Поиск в активном каталоге

Большую часть времени активный каталог будет использоваться для поиска некоторых значений. Это хранилище данных, которое оптимизировано в основном для чтения, поэтому данные будут в основном считываться.

Для поиска в активном каталоге платформа .NET имеет класс DirectorySearcher.

Мы можем использовать поиск только с провайдером LDAP. DirectorySearcher не работает с провайдерами NDS или IIS.

В конструкторе класса DirectorySearcher существуют четыре важные части поиска. Можно также использовать конструктор по умолчанию и определять параметры поиска с помощью свойств.

SearchRoot

Корень поиска (SearchRoot) определяет, где должен начаться поиск. По умолчанию SearchRoot является корнем домена, который используется в данный момент. SearchRoot определен с помощью свойства Path объекта DirectoryEntry.

Filter

Фильтр (Filter) определяет значения, которые мы хотим найти. Фильтр является строкой, которая должна быть заключена в круглые скобки.

Операторы отношений, такие как <=, =, >=, в выражениях допускаются. (objectClass = contact) будет искать все объекты типа contact; (lastName>=Nagel) ищет все объекты, где свойство lastName равно или больше Nagel, что означает, что оно следует за ним в алфавитном порядке.

Выражения могут комбинироваться с префиксными операциями & и | . (&(objectClass=user)(description=Auth*)) ищет все объекты типа user, где свойство description начинается со строки Auth. Так как операторы & и | находятся в начале выражения, то с помощью одного префиксного оператора можно комбинировать более двух выражений.

По умолчанию используется фильтр (objectClass=*), поэтому все объекты допустимы. Синтаксис фильтра определен в RFC 2254, 'Строковое представление фильтров поиска LDAP'. Этот RFC можно найти по адресу www.ietf.org/rfc/rfc2254.txt.

PropertiesToLoad

С помощью PropertiesToLoad мы определяем коллекцию StringCollection всех интересующих нас свойств. Как вы уже видели, объекты могут иметь множество свойств. Большинство из них будут не важны для нашего запроса поиска. Мы определяем

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ОБРАНЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату