Свойство Properties возвращает ResultPropertyCollection, где мы получаем доступ ко всем свойствам и значениям по имени свойства и по индексу.

SearchResultCollection results = Searcher.FindAll();

 foreach (SearchResult result in results) {

  ResutPropertyCollection props = result.Properties;

  foreach (string propName in props.PropertyNames) {

   Console.Write(propName + ': ');

   Console.WriteLine(props[propName][0]);

  }

  Console.WriteLine();

 }

}

Если необходимо получить весь объект после поиска, то это также возможна. SearchResult имеет метод GetDirectoryEntry(), который возвращает соответствующую запись DirectoryEntry найденного объекта.

Результирующий вывод показывает начале списка всех авторов книги Professional C# с выбранными свойствами

Поиск объектов пользователей

Последнее приложение, которое будет создано в этой главе, это приложение Windows Forms. С его помощью можно найти все объекты пользователей домена с динамически определяемой строкой фильтра. Можно также задать свойства объектов пользователей, которые должны выводиться.

Интерфейс пользователя

Интерфейс пользователя выводит нумерованные шаги, помогая использовать приложение.

1. На первом шаге можно ввести имя пользователя, пароль и контроллер домена. Вся эта информация является необязательной. Если контроллер домена не вводится, то соединение работает со связыванием без сервера. Если отсутствует имя пользователя, то используется контекст безопасности текущего пользователя.

2. С помощью кнопки все имена свойств объекта User могут загружаться динамически в окно списка ListBoxProperties.

3. После загрузки имен свойств, можно выбрать свойства, которые должны выводиться. Режим SelectionMode окна списка задач как MultiSimple.

4. Можно ввести фильтр для ограничения поиска. Значение по умолчанию, которое задается в этом диалоговом окне, ищет все объекты пользователей: (objectClass=user).

5. Теперь можно начать поиск.

Получение именующего контекста схемы

Это приложение имеет только два метода обработки событий: первый метод — обработчик для кнопки загрузки свойств и второй — для запуска поиска в домене. В первой части мы динамически считываем свойства класса User из схемы для вывода его в интерфейсе пользователя.

В методе-обработчике buttonLoadProperties_Click() с помощью метода SetLogonInformation() имя пользователя, пароль и имя хоста считываются во время диалога и сохраняются в членах класса. Затем метод SetNamingContext() задает имя LDAP схемы и имя LDAP используемого по умолчанию контекста. Имя LDAP этой схемы используется в вызове SetUserProperties() для задания свойств в окне списка:

private void buttonLoadProperties_Click(object sender, System.EventArgs e) {

 try {

  SetLogonInformation();

  SetNamingContext();

  SetUserProperties(schemaNamingContext);

 } catch (Exception ex) {

MessageBox.Show('Cheek your inputs! ' + ex.Message);

 }

}

protected void SetLogonInformation() {

 username =

  (textBoxUsername.Text == '' ? null :

  textBoxUsername.Text);

 password =

  (textBoxPassword.Text == '' ? null :

  textBoxPassword.Text);

 hostname = textBoxHostname.Text;

 if (hostname ! = '') hostname += '/';

}

Во вспомогательном методе SetNamingContext() мы используем корень дерева каталога для получения свойств сервера. Мы заинтересованы в значениях двух свойств: SchemaNamingContext.

protected string SetNamingContext() {

 using (DirectoryEntry de = new DirectoryEntry()) {

  string path = 'LDAP://' + hostname + '/rootDSE';

 de.Username = username;

 de.Password = password;

 de.Path = path;

 schemaNamingContext =

  de.Properties['schemaNamingContext'][0].ToString();

 defaultNamingContext =

  de.Properties['defaultNamingContext'][0].ToString();

 }

}

Получение имен свойств класса пользователя

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

0

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

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