Автоматизированная загрузка новых версий утилит
Время от времени я обнаруживаю в Internet то одну, то другую полезную утилиту. Поработав с ней некоторое время, я начинаю искать самую новую версию программы. Однако не всегда есть возможность регулярно посещать соответствующие Web-узлы в поисках новых версий. Я часто пользуюсь автономным инструментом поиска вирусов Stinger компании McAfee. Единственный недостаток этого инструмента заключается в том, что компания редко обновляет Stinger и невозможно предугадать, когда появится новая версия.
Очевидно, частота обновления Stinger зависит от числа новых вирусов. Я использовал сайт WatchThatPage (http://www.watchthatpage.com) для мониторинга изменений Web-страницы, но мне был нужен более удобный способ получать информацию о новых версиях файла и, кроме того, хотелось, чтобы новейшая версия автоматически доставлялась по почте. Так появился сценарий HTTPDownLoader.bat (см. листинг 1). Данный сценарий был составлен в первую очередь для утилиты Stinger, но не составит труда настроить его на поиск новых версий и загрузку любого файла, доступного через протокол HTTP.
Для загрузки и сравнения версий и размеров файлов Stinger в сценарии используются еще две утилиты. Кроме того, применяется старая проверенная утилита Blat для пересылки почтовых сообщений с присоединенными файлами.
Загрузка файлов с использованием HTTP
Из командной оболочки можно загружать файлы через протокол FTP, но внутренние команды и инструменты набора ресурсов не обеспечивают их загрузки по протоколу HTTP. Я просмотрел множество инструментов независимых поставщиков, которые можно найти в Internet, и выбрал один, который мог бы пригодиться всем. Список инструментов командной оболочки от независимых поставщиков приведен во врезке «Инструменты для командной оболочки». Для загрузки файла Stinger я использовал программу iOpus File Downloader. Она имеет графический интерфейс, но поддерживает и работу с командной строки; запускать ее можно без участия пользователя. Для загрузки файлов используется следующий синтаксис:
downloader.exe -download
source destination
где source указывает путь к файлу, который нужно загрузить, а destination — каталог, в который следует скопировать файл. Например, команда для Stinger выглядит следующим образом:
downloader.exe -download http://download.nai.com/ products/ mcafee-avert/stinger.exe D:stinger.exe
В выбранной мною текущей версии iOpus File Downloader каталог назначения должен находиться на локальной машине. Если используется путь в нотации Universal Naming Convention (UNC), то результаты копирования могут оказаться самые неожиданные. Я сообщил об этом недостатке в компанию iOpus, и в следующей версии ошибка должна быть исправлена. А пока следует использовать локальный путь (например, D:stinger.exe), а затем при необходимости копировать файл в удаленный каталог. В файле HTTPDownLoader.bat такое ограничение не вызывает затруднений.
Сравнение версий
Располагая инструментом для загрузки файла из Web, необходимо определить, отличается ли загруженная версия от прежней, которая имеется у пользователя. Для сравнения версий файлов я использовал утилиту Filever из пакета Windows 2000 Support Tools, с помощью которой можно сравнивать структуры папок и отдельные файлы. Сценарий HTTPDownLoader.bat загружает текущую версию с Web-узла, затем запускает Filever, чтобы сравнить новую программу с имеющимися экземплярами. Если номер версии или число байтов изменилось, то сценарий посылает по электронной почте сообщение об изменении файла и — если получатель запросит файл — пересылает новую версию в качестве вложения.
Используемая в сценарии базовая команда Filever выглядит следующим образом:
filever.exe /A D:stinger.exe
В этой команде ключ /A указывает, что утилита не должна выводить на экран атрибуты файла. Как видно из фрагмента исходного текста в листинге 2, для извлечения информации о номере версии и числе байтов в сценарии используется команда For. Я просто объединил информацию о версии (token 4) и размере (token 6). Может возникнуть вопрос, зачем вместе с номером версии проверять и число байтов? Во-первых, разработчик мог изменить содержимое файла, но не номер версии. Во-вторых, встречаются файлы без номера версии, и не исключено, что может измениться номер версии, но не размер файла. Функция сравнения показана под меткой A в листинге 2. Предполагается, что если файл на сайте-источнике изменился, то он представляет собой новую версию.
Полезный совет для запуска утилит из команды For: Filever и некоторые другие утилиты могут работать нестабильно, если их путь внутри команды For заключен в двойные кавычки. Вместо двойных кавычек — типичный прием для работы с пробелами — необходимо найти путь к утилите, не содержащий пробелов. К сожалению, многие инструменты, в том числе большинство утилит Microsoft, по умолчанию хранятся в каталогах, путь к которым содержит пробелы. Случается даже, что утилита прекрасно работает внутри команды For, пока путь к ней не заключен в двойные кавычки, но затем пользователь начинает получать сообщения об ошибках, например, The filename, directory name, or volume label syntax is incorrect («Синтаксическая ошибка в имени файла, имени каталога или метке тома»). Рекомендуется всегда устанавливать инструменты Support Tools и любые другие утилиты в каталоге, в пути к которому нет пробелов (чтобы не приходилось преобразовывать все пути в формат 8.3).
Особенности почтовых сообщений
Для пересылки почтовых вложений используется простая и гибкая утилита Blat. Во время подготовки данной статьи Blat была представлена версией 1.9.4, но данный сценарий успешно работает и с предыдущими версиями. Однако необходимо помнить о некоторых особенностях утилиты Blat. Одна из них заключается в том, что если обратиться к оперативной подсказке с помощью команды
blat /?
или
blat /help
из командного окна, то будет выдано сообщение об ошибке. Поэтому, чтобы увидеть подробный список параметров, следует ввести в командном окне
blat.exe
Число параметров Blat поражает. Однако в HTTPDownLoader.bat используются лишь некоторые из них. Если бы применяемая в сценарии команда Blat вводилась в командном окне, она имела бы следующий вид:
blat D:Fblat.txt -attach D:Stinger.exe -s «Прилагается новая версия Stinger» -server mail.yourcompany.com -f dick@yourcompany.com -t fred@yourcompany.com
Этот аргумент команды задает путь к текстовому файлу, который содержит тело почтового сообщения. Ключ attach указывает на присоединяемый файл, ключ s задает строку «Тема», ключ server — адрес почтового сервера SMTP, ключ f определяет адрес электронной почты отправителя сообщения, а ключ t — почтовый адрес получателя. Во фрагменте A листинга 3 показано, как выглядит команда Blat при использовании переменных вместо жестко заданных аргументов и ключей. Исходный текст фрагмента A посылает почтовое сообщение о новой версии утилиты и присоединяет эту новую версию. Команда Blat, предшествующая метке A, посылает только почтовое сообщение.
Вторая особенность, очевидная в предыдущей команде, — необходимость хранить текст сообщения в текстовом файле. Даже если сообщение очень короткое, его невозможно ввести в качестве аргумента; необходимо поместить сообщение в текстовый файл, который Blat использует в качестве источника сообщения.
Перед запуском
Чтобы эффективно использовать HTTPDownLoader.bat, необходимо предусмотреть несколько условий.
- Имя и URL целевого файла (онлайн-файла, для которого выполняется проверка версии и размера) не должны меняться при изменении версии.
- Размер целевого файла не должен быть слишком большим. Вряд ли целесообразно перегружать канал связи, ежедневно пересылая 100-мегабайтный файл для сравнения его с ранее полученной версией. Например, размер утилиты Stinger идеален — около 700 Кбайт.
- Сценарий сравнивает файлы по номеру версии и размеру в байтах. Можно сравнивать только по версии файла, но я предпочитаю использовать обе характеристики.
- Некоторые пользователи на предприятии не хотят получать новые файлы в качестве вложений. Они предпочитают просто узнавать об изменениях файла, чтобы самостоятельно загрузить его из сайта-источника или общей папки во внутренней сети.
- Если во внутренней сети вложенные файлы с расширением .exe блокируются, то можно просто послать оповещение по электронной почте и дать пользователям ссылку на общую папку, содержащую новый файл.
Подготовка сценария к работе
Я тестировал сценарий HTTPDownLoader.bat на машинах Windows XP Professional Edition Service Pack 1 (SP1) и Windows 2000 SP4. Для использования HTTPDownLoader.bat на своем предприятии следует сначала создать файл FBlat.txt с текстом почтового оповещения. Затем необходимо произвести настройку программного кода в листинге 4. Для этого потребуется выполнить следующие действия.
- Указать в переменной Tools путь к папке, в которой хранятся программы filever.exe, blat.exe и downloader.exe. Не следует использовать в пути двойные кавычки и пробелы.
- Указать в переменной HTTPloc адрес Web-страницы, в которой хранится нужный файл.
- Переменная Notes должна содержать Web-адрес, где хранятся выходные данные файла.
- В переменную Recipients записать получателей, которым нужно отправить только почтовое оповещение (без присоединенного файла). Получателей следует разделять не пробелами, а запятыми.
- Указать в переменной FRecipients получателей, которым необходимо отправить почтовое оповещение с присоединенным файлом. Получателей также следует разделять не пробелами, а запятыми.
- Переменная PRecipients должна содержать список получателей, которым нужно отправить почтовое оповещение в случае сбоя при загрузке файла. Например, такое оповещение может понадобиться администратору сценария или другому лицу, которому нужно знать об изменении URL. Записи в списке следует разделять запятыми.
- Указать в переменной From адрес электронной почты лица, посылающего почтовое оповещение.
- Указать в переменной SMTPsrvr адрес почтового сервера SMTP.
Дальнейшая настройка файла HTTPDownLoader.bat не требуется, за исключением тех случаев, когда новый файл необходимо копировать в общую папку или нужно указать отдельные адреса хранения утилит.
HTTPDownLoader.bat автоматически определяет папку, в которой он находится, и именно в эту папку по умолчанию записываются загруженные версии файлов и временные файлы Blat. Если пользователь не хочет сохранить эти объекты в другом месте, то дополнительной настройки не требуется. Если нужно перенести экземпляр нового файла из этого каталога в разделяемую папку, то следует добавить строку в раздел Mailit сценария, следом за командами в закомментированном исходном тексте листинга 3.
Завершающие операции
После того как сценарий начнет работать, нужно отправить на свой адрес несколько текстовых сообщений. Затем можно внести в список всех получателей и добавить сценарий в качестве задания в Task Scheduler. Следует обратиться ко всем, кому может потребоваться загружаемый файл, — в данном случае stinger.exe — и внести имена этих людей в список распространения. С помощью сценария можно автоматизировать HTTP-загрузку любых других файлов, требующих периодического обновления версий.
Дик Льюис (dlewis@winnetmag.com) — старший системный инженер компании CKT Consulting в Калифорнии. Имеет сертификаты MCSE и MCT, специализируется на системах управления масштаба предприятия
Инструменты командной оболочки
Меня то и дело спрашивают, где я нахожу такие необычные инструменты. Как правило, я отвечаю просто: «В Internet». Инструмент iOpus File Downloader, который используется в сценарии HTTPDownLoader.bat, тоже обнаружен мною в результате поиска в Internet. В поисковом механизме можно указать критерий Windows Command Shell Utilities или Windows Command Shell Tools. Ниже приводится несколько адресов, которые могут пригодиться:
BLAT for Windows | http://www.interlog.com/~tcharron/blat.html |
Dave Navarro?s CMD Tools | http://www.cmdtools.com |
Центр бесплатной загрузки | http://www.freedownloadscenter.com |
Бесплатные программы Gammadyne | http://www.gammadyne.com/cmdline.htm |
Бесплатные утилиты iOpus | http://www.iopus.com/freeware.htm |
Joeware.net | http://www.joeware.net |
Kilowatt Software | http://www.kilowattsoftware.com |
Small Wonders Software | http://www.smallwonders.com |
Smaller Animals Software | http://www.smalleranimals.com |
Инструменты командной оболочки SnapFiles | http://www.snapfiles.com |
SQLLY Development | http://www.sqlly.com/ib_win_cmdtools.asp |
Sysinternals | http://www.sysinternals.com |
SystemTools.com | http://www.systemtools.com |
TotalShareware | http://www.totalshareware.com |