Указав в качестве строки ADsPath просто " WinNT:
", можно выполнить связывание с корневым объектом-контейнером, содержащим все остальные объекты службы каталога.
Приведем несколько примеров строк связывания для доступа к различным объектам компьютера Windows ХР (табл. 11.1).
Таблица 11.1.Варианты строк связывания на компьютере Windows ХР
Строка ADsPath |
Описание |
"WinNT:" |
Строка для связывания с корневым объектом пространства имен |
"WinNT://404_Popov" |
Строка для связывания с компьютером 404_Popov |
"WinNT://404_Popov/Popov,user" |
Строка для связывания с пользователем Popov компьютера 404_Popov |
"WinNT://404_Popov/BankUsers, group" |
Строка для связывания с группой BankUsers на компьютере 404_Popov |
Для того чтобы из сценария WSH использовать объект ADSI, соответствующий сформированной строке связывания, необходимо применить функцию GetObject
языка JScript, которая возвращает ссылку на объект ActiveX, находящийся во внешнем каталоге. Например:
var NameSpaceObj = GetObject("WinNT:");
var ComputerObj = GetObject("WinNT://404_Popov");
var UserObj = GetObject("WinNT://404_Popov/Popov,user");
var GroupObj = GetObject("WinNT://404_Popov/BankUsers, group");
Замечание
Во всех рассмотренных ранее сценариях для создания объектов ActiveX мы пользовались методами CreateObject
и GetObject
объекта WScript
или объектом ActiveXObject
языка JScript. Для связывания же с объектом ADSI нужно использовать именно функцию GetObject
языка JScript (или VBScript)!
Перейдем теперь к рассмотрению конкретных примеров сценариев, использующих объекты ADSI.
Список всех доступных доменов в локальной сети
В листинге 11.1 приведен JScript-сценарий ListDomains.js, в котором создается список всех доменов, доступных в сети (рис. 11.1)
Рис. 11.1.Список всех имеющихся в сети доменов
В рассматриваемом сценарии производятся следующие действия. Сначала создается корневой объект NameSpaceObj
класса Namespace
для провайдера Windows NT, который содержит все остальные объекты службы каталога:
//Связываемся с корневым объектом Namespace
NameSpaceObj = GetObject("WinNT:");
Затем с помощью свойства Filter
из коллекции NameSpaceObj
выделяются все содержащиеся в ней объекты класса Domain
и создается экземпляр объекта Enumerator
(переменная е
) для доступа к элементам коллекции NameSpaceObj
:
//Устанавливаем фильтр для выделения объектов-доменов
NameSpaceObj.Filter = Array("domain");
//Создаем объект Enumerator для доступа к коллекции NameSpaceObj
E=new Enumerator(NameSpaceObj);
Список доменов будет храниться в переменной List
, которая инициализируется следующим образом:
List="Bce доступные домены в сети:\n\n";
В цикле while
выполняется перебор всех элементов коллекции, которые являются объектами класса Domain
; название домена, хранящееся в свойстве Name, добавляется (вместе с символом разрыва строки) в переменную List
:
while (!E.atEnd()) {
//Извлекаем текущий элемент коллекции (объект класса Domain)
DomObj=Е.item();
//Формируем строку с именами доменов
List+=DomObj.Name+"\n";
//Переходим к следующему элементу коллекции
E.moveNext();
}
Сформированная таким образом переменная List
выводится на экран с помощью метода Echo()
объекта WScript
:
WScript.Echo(List);
Листинг 11.1. Вывод на экран списка всех доменов локальной сети
/********************************************************************/
/* Имя: ListDomains.js */
/* Язык: JScript */
/* Описание: Вывод на экран списка всех доменов локальной сети */
/********************************************************************/
//Объявляем переменные
var
NameSpaceObj, //Корневой объект Namespace
DomObj, //Экземпляр объекта Domain
E, //Объект Enumerator
SList; //Строка для вывода на экран
//Связываемся с корневым объектом Namespace
NameSpaceObj = GetObject("WinNT:");
//Устанавливаем фильтр для выделения объектов-доменов
NameSpaceObj.Filter = Array("domain");
//Создаем объект Enumerator для доступа к коллекции NameSpaceObj
E=new Enumerator(NameSpaceObj);
List="Все доступные домены в сети:\n\n";
//Цикл по всем элементам коллекции доменов
while (!E.atEnd()) {
//Извлекаем текущий элемент коллекции (объект класса Domain)
Читать дальше