Сценарии для управления доменом NT

Типичный случай из жизни администратора: в понедельник утром отдел кадров требует создать десяток учетных записей для новых сотрудников. При этом помимо учетных записей необходимо создать личные каталоги новых пользователей, предоставить разрешения на доступ по коммутируемым линиям и многое другое. Вместо того чтобы проверить работу Microsoft Exchange Server или узнать последние новости в Web, администратор все утро занимается вводом информации о новых пользователях из электронной таблицы.

А между тем задачи подобного типа легко автоматизировать с помощью сценариев. В данной статье рассматривается сценарий автоматизации процедуры ввода новых пользователей в домен NT.

Подготовительная работа

Предположим, что существует домен NT с именем Corporate; основной контроллер домена (PDC) носит имя NT4PDC. Необходимо создать базовые условия для работы сценария. Во-первых, нужно составить таблицу Microsoft Excel, которая показана на Экране 1. В электронной таблице должна содержаться информация о каждом пользователе, добавляемом в домен. В данном примере показаны столбцы для идентификатора ID, полного имени, описания и пути UNC (Universal Naming Convention) к личному каталогу каждого пользователя; столбец для списка групп, в которые входит пользователь, с разделителями в виде запятых, и столбец с указанием разрешения на коммутируемый доступ. Электронную таблицу можно передать в отдел кадров, попросив заполнять ее при оформлении новых сотрудников (следует обратить внимание, что в списке пользовательских групп нет группы Domain Users, так как по умолчанию все пользователи относятся к этой группе).

Экран 1. Таблица с информацией о новых пользователях.

Затем следует задать имя системного источника данных ODBC Data Source Name (DSN), указывающее на таблицу (см. Экран 2) (я рекомендую создавать System DSN, а не User DSN, иначе сценарий не может быть выполнен другим пользователем, зарегистрировавшимся на машине). DSN указывает только местонахождение электронной таблицы, поэтому новые таблицы можно сохранить в том же месте, и по DSN их будет легко найти. В данном примере DSN с именем Excel использует драйвер Excel ODBC для извлечения данных из электронной таблицы. Если на компьютере нет драйвера для Excel, то необходимо установить последнюю версию Microsoft Data Access Components (MDAC), которую можно загрузить по адресу: http://www.microsoft.com/data.

Экран 2. Выбор таблицы как источника данных для System DSN.

Наконец, следует убедиться, что на компьютере, предназначенном для выполнения сценариев, есть Windows Script Host (WSH) и Active Directory Service Interfaces (ADSI). И WSH, и ADSI имеются на компьютерах Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server и Windows 2000 Datacenter Server. ADSI необходимо инсталлировать даже для работы с доменом NT. Чтобы установить эти компоненты на рабочей станции NT, требуется инсталлировать WSH из пакета Microsoft Windows NT 4.0 Option Pack и ADSI из комплекта инструментальных средств разработки Windows Platform SDK, который можно получить по адресу: http://www.microsoft.com/msdownload/ platformsdk/sdkupdate.

Составляем сценарий

В Листинге 1 приведен полный текст сценария bulk-users.vbs. Сценарий выполняет много операций, поэтому я описываю каждый его раздел.

В первой части bulk-users.vbs при помощи объектов ADO (ActiveX Data Objects) устанавливается связь с ODBC DSN с именем Excel. Так как источник DSN указывает на электронную таблицу Excel, в моем распоряжении имеется соединение базы данных с электронной таблицей. Затем я использую метод Execute объекта Connection, чтобы извлечь информацию из Листа 1 электронной таблицы. Эта информация хранится в объекте ADO Recordset.

Во второй части bulk-users.vbs я получаю ссылку на PDC с помощью ADSI. Работая со сценарием, необходимо заменить имя NT4PDC именем PDC-контроллера конкретного домена. Изменить имя PDC просто, так как оно определено в переменной, а не в каждом операторе, требующем имени PDC. Диспетчер учетных записей (SAM) PDC - источник списка учетных записей домена; данная ссылка позволяет работать с учетными записями домена.

В разделе 3 сценария с помощью объекта FileSystemObject библиотеки Scripting Runtime Library открывается новый текстовый файл с именем passwords.txt. В этом текстовом файле хранятся пароли для новых учетных записей. Метод CreateTextfile возвращает ссылку на объект TextStream, которую я сохраняю в переменной oTS. В сущности, переменная oTS становится представителем открытого текстового файла, поэтому впоследствии процедура записи информации в файл упрощается.

Приступаем к работе

После завершения предварительных операций можно приступить к созданию учетных записей пользователей (часть 4 сценария bulk-users.vbs). В первых нескольких строках раздела 4 содержатся лишь определения переменных, используемых в сценарии. Затем задается базовый путь к серверу, на котором будет создан личный каталог пользователя. Следует отметить, что данный путь связан с общим административным каталогом C$.

Основные действия данного сценария производятся в цикле Do...Loop, который поочередно обрабатывает строки набора записей. Первые шесть строк кода цикла извлекают информацию о новом пользователе из набора записей и сохраняют ее в переменных (данная операция не обязательна, но так будет проще работать с информацией). Имена полей в объекте Recordset соответствуют именам столбцов в электронной таблице Excel. Затем путем объединения первых двух символов ID нового пользователя, значения счетчика минут системных часов, даты юлианского календаря (числа от 1 до 365, указывающего день года) и показателя секунд системных часов генерируется псевдослучайный пароль. Можно сгенерировать пароль на основе имени пользователя, номера его полиса социального страхования или другой информации.

Следующие несколько строк исходного текста как раз отражают порядок создания учетной записи пользователя в домене. Для метода Create необходимо два параметра: тип создаваемого объекта (например, объект User) и идентификатор (например, ID пользователя). Метод возвращает ссылку на созданный объект User, которому поставлена в соответствие переменная oUserAcct. Сохранив эту ссылку в переменной, можно немедленно назначить параметры учетной записи, в том числе пароль, полное имя, описание, личный каталог и полномочия RAS. В сценарии предусмотрена проверка ошибок, которая позволяет выявить ошибки, произошедшие в процессе создания учетной записи пользователя. Например, если электронная таблица Excel содержит уже существующее имя пользователя, то при попытке создать учетную запись с таким же именем пользователя в сценарии будет зафиксирована ошибка, и система выведет на экран соответствующее сообщение.

Задав параметры учетной записи, сценарий устанавливает полномочия на использование RAS. Значение 9 соответствует разрешению на доступ к коммутируемому соединению, а значение 1 - запрету. Эти значения приведены в документации по ADSI, которую можно получить по адресу: http://msdn.microsoft.com/library/default.asp (следует перейти в Networking and Directory Services; Active Directory, ADSI and Directory Services; SDK Documentation; Directory Services; Active Directory Service In-terfaces (ADSI)). Затем метод SetInfo сохраняет все параметры учетной записи в домене, после чего сценарий получает свежую ссылку на учетную запись пользователя. После того как учетная запись сохранена, контроллер домена генерирует SID и записывает другую внутреннюю информацию (например, время создания учетной записи или начальные атрибуты безопасности). Благодаря новой ссылке на учетную запись, сценарий получает доступ к этой внутренней информации, которая необходима для следующего важного шага - зачисления пользователя в соответствующую группу. Эта операция производится в части 4A сценария. Прежде чем перейти к части 4A, я воспользовался методом Write объекта TextStream, чтобы сохранить ID и пароль пользователя в текстовом файле. Безусловно, запись пароля в файл представляет потенциальную угрозу для системы безопасности. По этой причине некоторые администраторы предпочтут назначить неслучайные пароли, которые не нужно сохранять в файле. Но если конфиденциальность гарантируется, то данный метод создания паролей для новых пользователей можно применять.

В электронной таблице Excel может храниться разделенный запятыми список групп, к которым должен принадлежать пользователь. С помощью функции Split языка VBScript список преобразуется в строковый массив. Функция Split отыскивает запятые в строке sGroups и строит массив с именем sGroupList, каждый элемент которого - имя группы. Затем каждый элемент массива обрабатывается оператором For...Next. Функция uBound указывает, сколько элементов содержится в массиве sGroupList, и цикл повторяется нужное число раз. В цикле For...Next я вновь использовал ADSI, чтобы получить ссылку на группу, в которую необходимо зачислить пользователя. Сохранив ссылку в переменной oGroup, я применил метод Add, чтобы добавить пользователя. Параметр ADsPath - внутренняя информация, получаемая доменом при сохранении учетной записи. После ввода нового пользователя я освобождаю ссылку на группу, записав в переменную ключевое слово Nothing. Данная операция не обязательна, но она обеспечивает корректность сценария и повышает производительность.

Когда все пользователи распределены по группам, я вновь обращаюсь к объекту FileSystemObject, чтобы создать личный каталог пользователя. Данная процедура выполняется в разделе 4 сценария blk-users.vbs. В результате с помощью переменной sHomePath образуется новая папка, а к окончательному ее имени прибавляется ID пользователя (папка C:users уже должна существовать; в противном случае данная операция закончится неудачей).

В разделе 5 сценария освобождается ссылка на объект User и происходит подготовка к обработке информации о следующем пользователе. Последняя строка конструкции Do...Loop переводит указатель на следующую строку внутри набора записей, чтобы извлечь информацию об очередном пользователе. Если указатель записей перемещается далее записи о последнем пользователе, то параметру End of File (EOF) присваивается значение True, и цикл завершается.

Часть 6 сценария выполняется после того, как в цикле Do...Loop были обработаны данные о последнем пользователе. В этом разделе электронная таблица Excel и текстовый файл с новыми паролями закрываются, а на экран выводится сообщение об успешном завершении работы сценария. На Экране 3 показан диспетчер User Manager for Domains с новыми учетными записями пользователей.

Экран 3. Учетные записи новых пользователей в User Manager for Domains.

Работайте со сценариями

Сценарии - превосходный инструмент, с помощью которого администратор может объединить различные функции операционной системы и добиться потрясающих результатов. Я использовал ADO, Scripting Runtime Library и ADSI - три сравнительно мало связанных между собой компонента ОС, - чтобы выполнить типичную административную задачу, поглощающую много времени. Из приведенных примеров видно, как упростить сложные задачи с помощью сценариев и приступить к исследованию ADO и ADSI, чтобы сэкономить время за счет использования специализированных решений.

Дон Джонс - технический автор и лектор. Его последняя книга «Microsoft .NET E-Commerce Bible» (Hungry Minds). С ним можно связаться по адресу: don@iridisconsulting.com.