Автоматизируем развертывание программного обеспечения
Разработка специализированного сценария для установки программ и исправлений...
Бобби Малик
Разработка специализированного сценария для установки программ и исправлений
Многие организации предпочитают использовать для автоматизированного распространения программного обеспечения специализированные программные средства, такие как 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, как было описано выше.