Опубликован: 12.01.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Мордовский государственный университет имени Н.П. Огарева
Лекция 8:

Сценарии WSH для доступа к службе каталогов АDSI

< Лекция 7 || Лекция 8: 123 || Лекция 9 >
Аннотация: Рассматривается стандартная для операционной системы Windows служба каталогов Active Directory Service Interface (ADSI). Приводятся примеры сценариев WSH, использующих ADSI для управления учетными записями пользователей и групп

Сценарии WSH для доступа к службе каталогов АDSI

Обсудим сначала термины "каталог" и "служба каталога", которые будут использоваться в этом разделе. Под каталогом в общем смысле этого слова подразумевается источник информации, в котором хранятся данные о некоторых объектах. Например, в телефонном каталоге хранятся сведения об абонентах телефонной сети, в библиотечном каталоге — данные о книгах, в каталоге файловой системы — информация о находящихся в нем файлах.

Что касается компьютерных сетей (локальных или глобальных), здесь также уместно говорить о каталогах, содержащих объекты разных типов: зарегистрированные пользователи, доступные сетевые принтеры и очереди печати и т.д. Для пользователей сети важно уметь находить и использовать такие объекты (а их в крупной сети может быть огромное количество), администраторы же сети должны поддерживать эти объекты в работоспособном состоянии. Под службой каталога (directory service) понимается та часть распределенной компьютерной системы (компьютерной сети), которая предоставляет средства для поиска и использования имеющихся сетевых ресурсов. Другими словами, служба каталога — это единое образование, объединяющее данные об объектах сети и совокупность служб, осуществляющих манипуляцию этими данными.

В гетерогенной (неоднородной) компьютерной сети могут одновременно функционировать несколько различных служб каталогов, например, NetWare Bindery для Novell Netware 3.x, NDS для Novell NetWare 4.x/5.x, Windows Directory Service для Windows NT 4.0 или Active Directory для Windows 2000/2003. Естественно, для прямого доступа к разным службам каталогов приходится использовать разные инструментальные средства, что усложняет процесс администрирования сети в целом. Для решения этой проблемы можно применить технологию ADSI (Active Directory Service Interface) фирмы Microsoft, которая предоставляет набор объектов ActiveX, обеспечивающих единообразный, не зависящий от конкретного сетевого протокола, доступ к функциям различных каталогов. Объекты ADSI включаются в операционные системы Windows 2000/XP и выше.

Для того, чтобы находить объекты в каталоге по их именам, необходимо определить для этого каталога пространство имен (namespace). Скажем, файлы на жестком диске находятся в пространстве имен файловой системы. Уникальное имя файла определяется расположением этого файла в пространстве имен, например:

C:\Windows\Command\command.com

Пространство имен службы каталогов также предназначено для нахождения объекта по его уникальному имени, которое обычно определяется расположением этого объекта в каталоге, где он ищется. Разные службы каталогов используют различные виды имен для объектов, которые они содержат. ADSI определяет соглашение для имен, с помощью которых можно однозначно идентифицировать любой объект в гетерогенной сетевой среде. Такие имена называются строками связывания (binding string) или строками ADsPath и состоят из двух частей. Первая часть имени определяет, к какой именно службе каталогов (или, другими словами, к какому именно провайдеру ADSI) мы обращаемся, например:

  • "LDAP://" — для службы каталогов, созданной на основе протокола LDAP (Lightweight Directory Access Protocol), в том числе для Active Directory в Windows 2000/2003;
  • "WinNT://" — для службы каталогов в сети Windows NT 4.0 или на локальной рабочей станции Windows XP/2000;
  • "NDS://" — для службы каталогов NetWare NDS (Novell Directory Service);
  • "NWCOMPAT://" — для службы каталогов NetWare Bindery.

Вторая часть строки ADsPath определяет расположение объекта в конкретном каталоге. Приведем несколько примеров полных строк ADsPath:

"LDAP://ldapsrv1/CN=Popov,DC=DEV,DC=MSFT,DC=COM"
"WinNT://Domain1/Server1,Computer"
"WinNT://Domain1/Popov"
"NDS://TreeNW/O=SB/CN=Kazakov"
"NWCOMPAT://NWServer/MyNw3xPrinter"

В этом разделе мы подробно рассмотрим несколько простых сценариев, использующих объекты ADSI для автоматизации некоторых распространенных задач администрирования на отдельной рабочей станции с операционной системой Windows XP; поняв принцип их работы, вы без труда сможете написать аналогичные сценарии для локальной сети, которая функционирует, скажем, под управлением Active Directory или контроллера домена с Windows NT 4.0. Напомним, что на выделенном компьютере с Windows XP имеется база данных, содержащая информацию обо всех локальных пользователях этого компьютера. Пользователи компьютера определяются своими атрибутами (имя регистрации, полное имя, пароль и т.п.) и могут объединяться в группы. Ниже мы приведем примеры сценариев WSH, с помощью которых можно:

  • получить список имеющихся в локальной сети доменов;
  • получить список всех групп, определенных на компьютере;
  • добавить и удалить пользователя компьютера;
  • определить всех пользователей заданной группы или все группы, в которые входит определенный пользователь;
  • просмотреть атрибуты пользователя и изменить его пароль.

Связывание с нужным объектом каталога

Первым шагом для доступа к пространству имен любого каталога в целях получения информации о его объектах или изменения свойств этих объектов, является связывание (binding) с нужным объектом ADSI.

Рассмотрим вначале, каким образом формируется строка связывания для доступа к объектам отдельной рабочей станции с операционной системой Windows XP. В общем виде эта строка имеет следующий формат:

"WinNT:[//ComputerName[/ObjectName[,className]]]"

Здесь параметр ComputerName задает имя компьютера, ObjectName — имя объекта (это может быть имя группы, пользователя, принтера, сервиса и т.п.), className — класс объекта. Возможными значениями параметра className являются, например, group (группа пользователей), user (пользователь), printer (принтер) или service (сервис Windows XP).

Указав в качестве строки ADsPath просто "WinNT:", можно выполнить связывание с корневым объектом-контейнером, содержащим все остальные объекты службы каталога.

Приведем несколько примеров строк связывания для доступа к различным объектам компьютера Windows XP (табл. 8.1).

Таблица 8.1. Варианты строк связывания на компьютере Windows XP
Строка 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 или VBScript, которая возвращает ссылку на объект ActiveX, находящийся во внешнем каталоге. Например (язык VBScript):

Set objNameSpace = GetObject("WinNT:")
Set objComputer = GetObject("WinNT://404_Popov")
Set objUser = GetObject("WinNT://Popov/Popov,user")
Set objGroup = GetObject("WinNT://Popov/BankUsers, group")

Замечание

Во всех рассмотренных ранее сценариях для создания объектов ActiveX мы пользовались методами CreateObject и GetObject объекта WScript или объектом ActiveXObject языка JScript. Для связывания же с объектом ADSI нужно использовать именно функцию GetObject языка JScript (или VBScript)!

Перейдем теперь к рассмотрению конкретных примеров сценариев, использующих объекты ADSI.

Список всех доступных доменов в локальной сети

В листинге 8.1 приведен сценарий ListDomains.vbs, в котором создается список всех доменов, доступных в сети.

В рассматриваемом сценарии производятся следующие действия. Сначала создается корневой объект objNameSpace класса Namespace для провайдера Windows NT, который содержит все остальные объекты службы каталога:

Set objNameSpace = GetObject("WinNT:")

Затем с помощью свойства Filter из коллекции ObjNameSpace выделяются все содержащиеся в ней объекты класса Domain:

objNameSpace.Filter = Array("domain")

В цикле For Each … In … выполняется перебор всех элементов коллекции, которые являются объектами класса Domain ; название домена, хранящееся в свойстве Name, добавляется (вместе с символом разрыва строки) в переменную strResult. Сформированная таким образом переменная strResult выводится на экран с помощью метода Echo объекта WScript.

'*******************************************************************
' Имя: ListDomains.vbs                                              
' Язык: VBScript                                                    
' Описание: Вывод на экран списка всех доменов локальной сети     
'*********************************************************************
Option Explicit

'Объявляем переменные
Dim objNameSpace        ' Корневой объект Namespace
Dim objDomain           ' Экземпляр объекта Domain
Dim strResult           ' Строка для вывода на экран

'Связываемся с корневым объектом Namespace
Set objNameSpace = GetObject("WinNT:")
'Устанавливаем фильтр для выделения объектов-доменов
objNameSpace.Filter = Array("domain")

strResult = "Все доступные домены в сети:" & vbCrLf & vbCrLf

' Перебираем элементы коллекции 
For Each objDomain In objNameSpace
  'Формируем строку с именами доменов
  strResult = strResult & objDomain.Name & vbCrLf
Next

'Вывод информацию на экран
WScript.Echo strResult
'*************  Конец *********************************************
Листинг 8.1. Вывод на экран списка всех доменов локальной сети
< Лекция 7 || Лекция 8: 123 || Лекция 9 >
Валентина Тюрина
Валентина Тюрина

Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys.

Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ.

Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре)

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Алихан Ергалиев
Алихан Ергалиев
Россия
Иван Иванов
Иван Иванов
Украина, Черкаси