Чтение онлайн

на главную

Жанры

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

Ватсон Карли

Шрифт:

Объект пользователя не имеет потомков, поэтому воспользуемся теперь организационной единицей. Давайте получим все объекты пользователей из организационной единицы Wrox Press в домене eichkogelstrasse.local. Свойство

Children
возвращает коллекцию
DirectoryEntries
, которая содержит объекты
DirectoryEntry
. Мы просматриваем все объекты
DirectoryEntry
для вывода имен объектов-потомков:

DirectoryEntry de = new DirectoryEntry;

de.Path. = "LDAP://celticrain/OU=Wrox Press, " + "DC=eichkogelstrasse, DC=local";

Console.WriteLine("Children of " + de.Name);

foreach (DirectoryEntry obj in de.Children) {

 Console.WriteLine(obj.Name);

}

В

данном примере мы видим все объекты в организационной единице: пользователей, контакты, принтеры, общие ресурсы и другие организационные единицы. Если нужно увидеть только некоторые типы объектов, можно использовать свойство
SchemaFilter
класса
DirectoryEntries
:

DirectoryEntry de = new DirectoryEntry;

de.Path = "LDAP://celticrain/OU=Wrox Press, " + "DC=eichkogelstrasse, DC-local";

Console.WriteLine("Children of " + de.Name);

de.Children.SchemaFilter.Add("user");

foreach(DirectoryEntry obj in de.Children) {

 Console.WriteLine(obj.Name);

}

В результате мы видим в организационной единице только объекты пользователей:

Кэш

Чтобы уменьшить сетевой трафик, ADSI использует кэш для свойств объектов. Как было показано ранее, обращение к серверу не происходит при создании объекта

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

Запись изменений в объекты также происходит только в кэше. Задание множества свойств не генерирует сетевого трафика. Метод

DirectoryEntry.CommitChanges
требуется для очистки кэша и переноса всех измененных данных на сервер. Чтобы снова получить вновь записанные данные из хранилища каталога, можно для чтения свойств использовать метод
DirectoryEntry.RefreshCache
. Задание свойства
UsePropertyCache
как
false
может быть очень полезно для отладки, чтобы увидеть, какое свойство было изменено неправильно.

Обновление записей каталога

Объекты в активном каталоге обновляются

так же легко, как и читаются. Изменение значений возможно после считывания объекта. Чтобы удалить все значения одного свойства, может вызываться метод
PropertyValueCollection.Clear
. С помощью метода
Add
к свойству могут добавляться новые значения.
Remove
и
RemoveAt
удаляют специфические значения из коллекции свойства:

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");

Поделиться:
Популярные книги

Измена. Я отомщу тебе, предатель

Вин Аманда
1. Измены
Любовные романы:
современные любовные романы
5.75
рейтинг книги
Измена. Я отомщу тебе, предатель

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад

Мимик нового Мира 6

Северный Лис
5. Мимик!
Фантастика:
юмористическая фантастика
попаданцы
рпг
5.00
рейтинг книги
Мимик нового Мира 6

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Начальник милиции

Дамиров Рафаэль
1. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Темный Патриарх Светлого Рода 4

Лисицин Евгений
4. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 4

Стрелок

Астахов Евгений Евгеньевич
5. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Стрелок

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Архил…? Книга 3

Кожевников Павел
3. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
7.00
рейтинг книги
Архил…? Книга 3

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Лорд Системы 11

Токсик Саша
11. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 11

Черный Маг Императора 5

Герда Александр
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 5

Последний попаданец 2

Зубов Константин
2. Последний попаданец
Фантастика:
юмористическая фантастика
попаданцы
рпг
7.50
рейтинг книги
Последний попаданец 2