Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Программирование для администраторов
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

15.12 ADSI. Интерфейс IADsContainer

Интерфейс IADSContainer в скриптах ADSI на VBScript, общие свойства и методы контейнерных объектов (Site, Domain, OU), свойства Count и Filter, методы CopyHere(), Create(), Delete(), GetObject(), MoveHere()

Интерфейс IADsContainer обеспечивает набор свойств и методов для контейнерных объектов Active Directory (в основном — объектов организационных подразделений и доменов). Чаще всего свойства и методы этого интерфейса используются для двух задач:

  • для получения доступа ко всем элементам, которые находятся в данном контейнерном объекте. Например, чтобы получить набор отличительных имен для объектов пользователей в организационном подразделении HQ в домене nwtraders1.msft, можно использовать следующий код:

Dim oContainer

Dim oUser

Set oContainer = GetObject("LDAP://ou=HQ,dc=nwtraders1,dc=msft")

oContainer.Filter = Array("user")

For Each oUser In oContainer

    Wscript.Echo oUser.ADsPath

Next

  • для создания, удаления, копирования или перемещения элементов в контейнерном объекте. Например, для создания объекта пользователя в том же OU можно использовать код вида:

Dim oContainer

Dim oUser

Set oContainer = GetObject("LDAP://ou=HQ,dc=nwtraders1,dc=msft")

'Создаем объект пользователя и настраиваем обязательные свойства

Set oUser = oContainer.Create("user", "CN=Alexander Ivanov")

oUser.Put "samAccountName", "AIvanov"

oUser.Put "userPrincipalName", "AIvanov@nwtraders1.msft"

oUser.SetInfo

'Приводим объект пользователя в рабочее состояние

oUser.SetPassword "P@ssw0rd"

oUser.AccountDisabled = False

oUser.SetInfo

В интерфейсе IADsContainer предусмотрены следующие свойства:

  • Count — это свойство должно возвращать информацию о количестве вложенных элементов в контейнере. Если для контейнерного объекта настроен фильтр при помощи свойства Filter, то это свойство должно вернуть информацию только о количестве элементов, которые не отбрасываются фильтром. Однако, к сожалению, при работе через провайдер LDAP это свойство не поддерживается.
  • Filter — это свойство позволяет настроит фильтр для элементов в данном контейнере. Те элементы, которые не соответствуют данному фильтру, при работе с контейнером будут игнорироваться. Это свойство в качестве значения принимает массив значений типа Variant с именами классов объектов Active Directory согласно схеме (например, "user", "oкпфтшяфешщтфдГтш", "computer" и т.п.). К примеру, если в организационном подразделении HQ нас интересуют только объекты пользователей, то пример применения этого свойства может выглядеть так:

Dim oContainer

Set oContainer = GetObject("LDAP://ou=HQ,dc=nwtraders1,dc=msft")

oContainer.Filter = Array("user")

'Проверяем фильтр

For Each oFilter In oContainer.Filter

    Wscript.Echo oFilter

Next

Чтобы снять фильтр, можно использовать код вида

oContainer.Filter = Nothing

  • Hints — это свойство позволяет определить, какие именно свойства для данного контейнерного объекта необходимо скачать в кэш свойств при получении ссылки на данный объект. Главная его цель — оптимизация сетевого трафика и расхода оперативной памяти при работе с большим количеством объектов. Если мы укажем только необходимые нам свойства, то другие свойства скачиваться с контроллера домена не будут и, таким образом, мы получим выигрыш в производительности при работе с этой программой. Однако это свойство, скорее зарезервировано для будущего использования. При работе через провайдеры WinNT, NDS и NWCOMPAT оно не работает официально. Если же вы подключаетесь к Active Directory через провайдер LDAP, то  выполнения требуемых функций от него также удается добиться далеко не всегда.

Работает это свойство с массивом строковых значений. Пример его применения может выглядеть так:

Dim oContainer

Set oContainer = GetObject("LDAP://ou=HQ,dc=nwtraders1,dc=msft")

oContainer.Hints = Array("adminDescription")

Wscript.Echo oContainer.Description

Ниже представлена информация о методах интерфейса IADsContainer:

  • CopyHere() — этот метод позволяет скопировать элемент внутри данного контейнерного объекта. Сразу отметим, что использовать его можно только при подключении к службе каталогов NDS средствами провайдера NDS. При использовании любого другого провайдера попытка вызвать этот метод вернет ошибку "Не поддерживается".

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

  • Create() — очень важный и частоиспользуемый метод интерфейса IADsContainer. Этот метод позволяет создать новый элемент в данном контейнере. Он принимает два обязательных параметра:
    • имя класса создаваемого объекта (например, "user', "group", "organizationalUnit", "computer" и т.п.)
    • относительное отличительное имя для данного объекта (точно в том же формате, в котором это имя возвращается при помощи свойства IADs.Name).

Этот метод возвращает ссылку на созданный объект в оперативной памяти. Затем можно присвоить значение свойствам данного объекта (лучше при помощи метода IADs.Put(), чтобы гарантировать отсутствие ошибок) и сохранить созданный объект в службе каталогов при помощи метода SetInfo(). Например, создание глобальной группы может выглядеть так:

Dim oContainer

Dim oGroup

Set oContainer = GetObject("LDAP://ou=HQ,dc=nwtraders1,dc=msft")

Set oGroup = oContainer.Create("group", "CN=Script Users")

oGroup.Put "groupType", ADS_GROUP_TYPE_GLOBAL_GROUP Or _ ADS_GROUP_TYPE_SECURITY_ENABLED

oGroup.Put "samAccountName", "Script Users"

oGroup.Put "name", "Script Users"

oGroup.Put "displayName", "Script Users"

oGroup.Put "description", "Script Users Security Group"

oGroup.SetInfo

  • Delete() — этот метод позволяет удалить элемент из данного контейнерного объекта. Он также принимает в качестве параметров имя класса и относительное отличительное имя для удаляемых объектов. Если класс в Active Directory уже отключен, а вам нужно удалить экземпляр этого класса, то вместо имени класса необходимо передать NULL. Пример удаления объекта группы Script Users может выглядеть так:

Dim oContainer

Set oContainer = GetObject("LDAP://ou=HQ,dc=nwtraders1,dc=msft")

oContainer.Delete "group", "CN=Script Users"

  • Get__NewEnum() — этот метод не предназначен для того, чтобы вызывать его явно. Он возвращает набор элементов, который имеется в данном контейнерном объекте. Обычно он вызывается автоматически, например, при использовании синтаксической конструкции For Each...:

Dim oContainer

Dim Item

Set oContainer = GetObject("LDAP://ou=HQ,dc=nwtraders1,dc=msft")

For Each Item In oContainer

    Wscript.Echo Item.Name

Next

  • GetObject() — этот метод позволяет вернуть ссылку на элемент в контейнерном объекте. В качестве параметров этот элемент принимает класс объекта и его относительное отличительное имя, например:

Dim oContainer

Dim oUser

Set oContainer = GetObject("LDAP://ou=HQ,dc=nwtraders1,dc=msft")

Set oUser = oContainer.GetObject("user", "CN=Alexander Ivanov")

Wscript.Echo oUser.ADsPath

  • MoveHere() — этот метод позволяет переместить какой-либо элемент в данный контейнерный объект. В качестве параметров этот метод принимает имя отличительное существующего объекта и его новое относительное отличительное имя. Например, чтобы переместить объект пользователя TestUser1 из контейнера Users в Active Directory в наше организационное подразделение HQ, можно использовать следующий код:

Dim oContainer

Dim oUser

Set oContainer = GetObject("LDAP://ou=HQ,dc=nwtraders1,dc=msft")

Set oUser = oContainer.MoveHere _

("LDAP://CN=TestUser1,CN=Users,DC=nwtraders1,DC=msft", "CN=TestUser1")

Wscript.Echo oUser.ADsPath

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

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

Отметим некоторые моменты, связанные с применением метода MoveHere(). При помощи этого метода можно перемещать в данный контейнерный объект как объекты из того же домена, так и объекты из других доменов данного леса. Однако для перемещения объектов из других доменов необходимо обязательно выполнить некоторые условия:

  • домен назначения должен работать по крайней мере в режиме Windows 2000 Native;
  • перемещать можно только конечные объекты (например, объекты пользователей) или пустые контейнерные объекты (например, организационное подразделение, в котором нет никаких вложенных объектов).

При перемещении объекта между доменами для объекта создается новый SID, а старый сохраняется при помощи атрибута SIDHistory. Явно предоставленные разрешения для пользователя при этом сохраняются, но теряется его членство в глобальных группах (и, соответственно, предоставленные через глобальные группы разрешения). Для перемещаемых объектов пользователей назначенные им пароли сохраняются.

Если же вам нужно переместить между доменами целое организационное подразделение со вложенными элементами (другими организационными подразделениями, объектами пользователей и т.п.), то лучше использовать вместо метода MoveHere() утилиту командной строки MoveTree, которая входит в состав Windows Server 2003 Support Tools.

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 

 
© 2004-2008, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru