Поделиться через


Перечисление пользователей

В отличие от доменов Windows NT 4.0, пользователи Windows 2000 могут размещаться в любом контейнере или подразделении в домене, а также в корне домена. Это означает, что пользователи могут находиться в различных расположениях в иерархии каталогов. Поэтому у вас есть два варианта перечисления пользователей:

  • Перечисление пользователей, непосредственно содержащихся в контейнере, подразделении или корневом каталоге домена:

    Явным образом привязывается к объекту контейнера, который содержит пользователей, которые вы хотите перечислить, задайте фильтр, содержащий "user" в качестве класса с помощью свойства IADsContainer.Filter, используйте метод IADsContainer::get__NewEnum для перечисления пользовательских объектов.

    Этот метод можно использовать для перечисления пользователей, которые непосредственно содержатся в контейнере или объекте подразделения. Если контейнер содержит другие контейнеры, которые могут содержать других пользователей, необходимо привязать их к этим контейнерам и рекурсивно перечислить пользователей в этих контейнерах. Если вам не требуется управлять пользовательскими объектами и только необходимо прочитать определенные свойства, используйте глубокий поиск, описанный в варианте 2.

    Так как перечисление возвращает указатели на объекты ADI COM, представляющие каждый объект пользователя, можно вызвать QueryInterface для получения идентификаторов IAD, IADsUser и интерфейсов IADsPropertyList указателей на объект пользователя. Это означает, что вы можете получить указатели интерфейса на каждый перечисляемый объект пользователя в контейнере без явной привязки к каждому объекту пользователя. Чтобы выполнять операции со всеми пользователями непосредственно в контейнере, перечисление не требует привязки к каждому пользователю для вызова методов IAD или IADsUser . Чтобы получить определенные свойства от пользователей, используйте IDirectorySearch , как описано в варианте 2.

  • Выполните глубокий поиск (&(objectClass=user)(objectCategory=person)), чтобы найти всех пользователей в дереве:

    Во-первых, привязывайся к объекту контейнера, где начинается поиск. Например, чтобы найти всех пользователей в домене, привязать к корневому каталогу домена; чтобы найти всех пользователей в лесу, привязаться к глобальному каталогу и выполнить поиск из корневого каталога GC.

    Затем используйте IDirectorySearch для запроса с помощью фильтра поиска, содержащего (&(objectClass=user)(objectCategory=person)) и предпочтения поиска ADS_SCOPE_SUBTREE.

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

    IDirectorySearch извлекает только значения определенных свойств от пользователей. Чтобы получить значения, используйте IDirectorySearch. Чтобы управлять объектами пользователя, возвращаемыми из поиска, то есть использовать методы IAD или IADsUser, необходимо явно привязать к ним. Для этого укажите различающееся имя в качестве одного из свойств, возвращаемых из поиска, и используйте возвращаемые различающиеся имена для привязки к каждому пользователю, возвращенным в поиске.

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