Разработка специализированного сценария для установки программ и исправлений

Многие организации предпочитают использовать для автоматизированного распространения программного обеспечения специализированные программные средства, такие как Microsoft Systems Management Server (SMS). Но бывает и так, что бюджет компании не позволяет приобрести и внедрить подобную систему. В подобных случаях существует два варианта решения: использовать встроенные возможности операционной системы Windows (такие как объекты групповой политики — GPO) или разработать специальный сценарий регистрации (logon script). Второй вариант мне кажется предпочтительным, поскольку такой подход предоставляет весьма гибкие возможности по настройке, развертыванию и сопровождению систем. Одним из примеров практического применения сценария регистрации может служить автоматизация установки программного обеспечения и исправлений. В этой статье я расскажу о том, как создать на VBScript сценарий регистрации, который реализует данную функциональность. В дальнейшем все желающие смогут модифицировать предложенный сценарий для приведения его в соответствие требованиям конкретной среды.

Основной сценарий регистрации

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

На основе изложенных требований был разработан сценарий регистрации Install.vbs, текст которого показан в листинге 1. Сценарий считывает команды, размещаемые в файле входных данных, построчно выполняет их и выводит на экран сообщения о процессе установки. Вывод сообщений на экран я осуществлял с помощью Microsoft Internet Explorer (IE), хотя можно выбрать для этого и какой-нибудь другой метод.

Программа Install.vbs соответствует всем необходимым требованиям, предъявляемым к рассматриваемому сценарию регистрации. Наше первое ключевое требование (установка и удаление программ и исправлений) в данном сценарии реализовано аналогично пакетному файлу, поскольку здесь выполняется построчное считывание и выполнение команд из входного файла. Для открытия входного файла и чтения из него команд используется метод OpenTextFile объекта FileSystemObject, а запуск считанной из файла команды выполняется с помощью метода Run объекта WScript.Shell, что отражено в листинге 1 во фрагменте, обозначенном меткой B.

Пусть, например, требуется удалить все файлы из временного каталога, запустить сценарий installpkg1.vbs для установки архиватора WinZip, обновить файл .dat, используемый антивирусной программой (это делается с помощью файла updatevs.cmd), и установить исправление для системы безопасности для службы Microsoft Data Access Components (MDAC). Чтобы реализовать перечисленные требования, нужно просто создать, а затем сохранить текстовый файл с именем installer_input.txt, в котором будут содержаться соответствующие команды, по одной на каждой строке. Данный файл является входным для нашего сценария. Когда запускается сценарий Install.vbs, он считывает содержимое файла installer_input.txt, после чего начинает выполнять находящиеся там команды в том порядке, в котором они располагаются в файле. Если сценарий использует приведенный в листинге 2 образец текстового файла, то будут последовательно выполнены команда Del, запуск installpkg1.vbs, запуск updatevs.cmd и команда установки MDAC (некоторые из строк в листинге 2 переходят на следующую строку, но это обусловлено форматом печатного листа). В рассматриваемом примере все установочные файлы хранятся на центральном сервере, поэтому в текстовом файле содержится путь, включающий имя UNC (Universal Naming Convention), т. е. абсолютный путь, указывающий на соответствующий общий каталог на сервере.

В данном сценарии реализовано и другое, обозначенное выше обязательное требование: в процессе выполнения он информирует пользователя о ходе установки путем вывода соответствующих информационных сообщений. Функция вывода данных на экран может быть реализована различными способами: можно выводить всплывающее сообщение командой WScript.Echo либо организовать вывод выходного потока на консоль с помощью свойства WScript.StdOut. Однако при этом следует помнить, что если любой из вариантов должен использоваться в сценарии, запускаемом в полностью автоматическом режиме (т. е. без необходимости нажатия пользователем каких-либо кнопок в появляющихся окнах сообщений), то данный сценарий должен запускаться с помощью сервера сценариев CScript.

В качестве альтернативы для отображения сообщений на экране можно воспользоваться браузером IE, что я и проделал в сценарии Install.vbs. Здесь с помощью объекта автоматизации Internet Explorer. Application создается окно нового документа, а запись данных в это окно осуществляется с помощью метода Write данного объекта. Подробное описание объекта Internet Explorer.Application можно найти по адресу.

Как видно из фрагмента сценария, отмеченного в листинге 1 меткой A, в начале программы Install.vbs выполняется инициализация свойств отображаемого окна (display-window), а также присваивается значение «истина» (true) свойству «Видимость» (visible), для того чтобы в процессе выполнения это окно отображалось на экране. Затем ссылка на вновь созданный объект документа IE (объект display-window) записывается в переменную oDoc. После этого во фрагменте кода с меткой B управление передается процедуре DocWrite (сама процедура обозначена меткой C), которая записывает текст сообщения в окно отображения IE.

В Install.vbs реализовано и третье обязательное требование: администратор имеет возможность манипулировать командами запуска установки тех или иных программ по своему усмотрению. Действительно, все это можно делать путем обычного редактирования входного текстового файла. При добавлении в него новой строки будет включена новая команда на исполнение. И наоборот, если строка из этого файла удаляется, соответствующая команда исключается из списка выполняемых команд.

И наконец, в данном сценарии реализованы две дополнительные функции (о которых говорилось в начале раздела), а именно настройка операционной системы и приложений и сбор информации. Например, чтобы заменить стандартное окно WinLogon (которое появляется после нажатия комбинации клавиш Ctrl+Alt+Delete на системах Windows NT и более поздних) на какое-либо другое, нужно добавить во входной файл следующую строку:

regedit /s winlogon.reg

где файл winlogon.reg содержит необходимую конфигурацию реестра. Если сценарий должен обеспечить сбор какой-либо информации, например выяснить объем свободного дискового пространства, то в Install.vbs можно включить строку запуска команды или сценария, которые могут собрать интересующие пользователя данные.

Определение типа операционной системы

Итак, мы создали базовый механизм для последовательного запуска команд установки или удаления тех или иных программ и исправлений, и теперь требуется «научить» наш сценарий определять тип операционной системы, для того чтобы исключить возможность случайной установки этих программ на сервер или контроллер домена. Другими словами, нужно сделать так чтобы программы распространялись только на те системы, на которых установлены заданные типы операционных систем — в нашем примере это будут системы Windows XP или Windows NT 4.0 (при желании можно дополнить этот список другими версиями Windows).

Когда сетевая среда состоит только из компьютеров с установленной на них Windows 2000 и более поздними версиями, для определения типа операционной системы лучше всего воспользоваться функциями интерфейса Windows Management Instrumentation (WMI). При этом в сценарий можно добавить код, считывающий значение свойства Name класса WMI Win32 OperatingSystem для получения информации о типе операционной системы, и значение свойства DomainRole класса Win32_ComputerSystem для определения роли в домене. Пример функции DetectOS, определяющей тип операционной системы, показан в листинге 3. Данную функцию можно включить в текст основного сценария Install.vbs. Функция DetectOS может применяться и для определения типа операционной системы для версий Windows 98 и более поздних, при условии, что на них были установлены компоненты WMI Core. Компоненты WMI Core для Windows NT 4.0 Server и NT 4.0 Workstation можно загрузить по адресу.

Если сетевая среда является смешанной (т. е. в ней есть и компьютеры с Windows NT 4.0, на которые не установлены компоненты WMI Core), то для определения типа операционной системы можно воспользоваться, например, утилитой GetType из пакета Microsoft Windows 2000 Resource Kit, раздел Management. С помощью этой утилиты командной строки можно определять тип операционной системы как на локальном, так и на удаленном компьютере. В процессе работы данная утилита запрашивает из реестра данные о типе установки и в соответствии с полученными результатами определяет значение уровня ошибки (%ERRORLEVEL%). Перечень возвращаемых утилитой GetType (gettype.exe) значений уровней ошибок приводится в табл. 2. Как мы видим, данная утилита не определяет версии Windows Server 2003 и Windows XP. Для того чтобы иметь возможность идентифицировать и такие системы, можно добавить в сценарий фрагмент кода, который с помощью цикла For будет обрабатывать выходные данные команды Ver. Пример реализации подобной обработки показан в листинге 4. Здесь команда Ver возвращает информацию о версии операционной системы, которая затем обрабатывается командой For для идентификации версии установленной операционной системы.

Завершающий этап: создание командного файла

Финальная стадия включает создание строки команды, которая будет использоваться для запуска Install.vbs из сценария регистрации. В Листинге 5 показан командный файл LogonScr.cmd, который может применяться в смешанной среде. Сначала с помощью команды Echo Off отключается вывод на экран всех команд, выполняемых в данном файле. Затем (метка A) проверяется, является ли версия системы Windows NT. Если в среде используются более старые версии операционной системы, такие как Windows 98 или Windows ME, следует рассмотреть возможность установки на них WMI for Windows 98 или использовать для идентификации операционной системы комбинацию команд Ver и For, как было описано выше.

После проверки на соответствие версии Windows NT проверяется, не является ли система Windows Server 2003. Если это так, то сценарий завершает работу. Затем выполняется проверка на соответствие Windows XP, и при положительном результате сценарий переходит в раздел Windows XP. Если обнаруживается, что система не является Windows XP, тогда (метка C) для определения типа системы (Windows 2000 или Windows NT 4.0) вызывается утилита gettype.exe.

В командном сценарии должен быть предусмотрен механизм обработки ошибок, поэтому фрагмент, обозначенный меткой B, с помощью команды If проверяет существование файла gettype.exe и при отсутствии этого файла также завершает выполнение сценария. Чтобы получить более подробную информацию о команде If и ее синтаксисе, следует запустить окно командной строки и набрать в нем:

if /?

Теперь из LogonScr.cmd нужно запустить сценарий Install.vbs, соответствующий типу операционной системы. Чтобы файл LogonScr.cmd работал корректно, требуется создать файлы Instal.vbs для каждой версии операционной системы и сохранить каждый из них в отдельном каталоге, причем это должно быть сделано до запуска LogonScr.cmd. Для этого нужно выполнить следующие действия:

  1. Создать три папки с названиями WindowsXP, Windows2000 и WindowsNT.
  2. В каждую папку скопировать файл Install.vbs.
  3. Скопировать в каждую папку файл входных данных installer_input.txt. Затем следует отредактировать данный файл, включив в него только те команды, которые соответствуют типу конкретной операционной системы.
  4. Включить в командный файл для каждого типа операционной системы пути (абсолютные или относительные), как показано в конце листинга 5, соответственно обеспечив запуск файлов Install.vbs из папок с названиями Windows2000, WindowsNT и WindowsXP.

Запуск сценария регистрации

Для того чтобы данный сценарий регистрации был запущен на компьютере пользователя, нужно настроить в пользовательском объекте AD свойство «сценарий регистрации» (logon script) на файл LogonScr.cmd. Это делается через оснастку Active Directory Users and Computers консоли MMC (Microsoft Management Console). В случае домена Windows NT следует использовать утилиту User Manager for Domains. После того как данное свойство будет установлено, при следующей регистрации пользователя в домене на его компьютере будет запущен файл LogonScr.cmd и определен тип операционной системы, после чего будет запущен сценарий Install.vbs. В процессе работы сценарий Install.vbs последовательно выполняет команды, считанные им из соответствующего файла входных данных, и выводит на экран информацию о ходе работы, как показано на экране 1. По окончании выполнения последней команды из списка сценарий закрывает окно отображения IE (фрагмент с меткой C листинга 1) и завершает работу.

Экран 1. Окно Internet Explorer для вывода результатов исполнения команд Install.vbs

Простота тиражирования

Применение в сценариях регистрации файлов Install.vbs и LogonScr.cmd представляет собой достойную альтернативу пробежке по всему офису для установки на компьютеры сотрудников соответствующих программ или исправлений, особенно в тех случаях, когда эти компьютеры работают под управлением операционных систем различных типов. Описанные сценарии призваны облегчить задачу администраторам сети Windows и существенно сократить время установки программного обеспечения и исправлений на компьютеры пользователей.

Бобби Малик - Cтарший консультант по Windows NT и Citrix, шт. Нью-Джерси. Работает в отрасли более десять лет, в том числе пять лет с платформами Windows. bmalik@adminscripts.net


Таблица 1. Функции сценария регистрации

ФункцияОбязательная/ дополнительная
Установка и удаление программ и исправленийОбязательная
Вывод информации пользователюОбязательная
Манипулирование набором команд установкиОбязательная
Настройка операционной системы и приложенийДополнительная
Сбор информацииДополнительная

Таблица 2. Уровни ошибок, возвращаемые утилитой GetType

Уровень ошибкиТип операционной системы
1Windows NT Workstation
2Windows 2000 Professional
3Windows NT 4.0 Server - не контроллер домена (DC)
4Windows 2000 Server - не контроллер домена
5Windows NT Server - контроллер домена
6Win2K Server - контроллер домена
7Windows NT Server, Enterprise Edition (NTS/E) и Windows NT Server 4.0, Terminal Server Edition (WTS)-DC
8NTS/E and WTS - не контроллер домена