Автоматизированная загрузка новых версий утилит

Время от времени я обнаруживаю в 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. Для этого потребуется выполнить следующие действия.

  1. Указать в переменной Tools путь к папке, в которой хранятся программы filever.exe, blat.exe и downloader.exe. Не следует использовать в пути двойные кавычки и пробелы.
  2. Указать в переменной HTTPloc адрес Web-страницы, в которой хранится нужный файл.
  3. Переменная Notes должна содержать Web-адрес, где хранятся выходные данные файла.
  4. В переменную Recipients записать получателей, которым нужно отправить только почтовое оповещение (без присоединенного файла). Получателей следует разделять не пробелами, а запятыми.
  5. Указать в переменной FRecipients получателей, которым необходимо отправить почтовое оповещение с присоединенным файлом. Получателей также следует разделять не пробелами, а запятыми.
  6. Переменная PRecipients должна содержать список получателей, которым нужно отправить почтовое оповещение в случае сбоя при загрузке файла. Например, такое оповещение может понадобиться администратору сценария или другому лицу, которому нужно знать об изменении URL. Записи в списке следует разделять запятыми.
  7. Указать в переменной From адрес электронной почты лица, посылающего почтовое оповещение.
  8. Указать в переменной 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 Windowshttp://www.interlog.com/~tcharron/blat.html
Dave Navarro?s CMD Toolshttp://www.cmdtools.com
Центр бесплатной загрузкиhttp://www.freedownloadscenter.com
Бесплатные программы Gammadynehttp://www.gammadyne.com/cmdline.htm
Бесплатные утилиты iOpushttp://www.iopus.com/freeware.htm
Joeware.nethttp://www.joeware.net
Kilowatt Softwarehttp://www.kilowattsoftware.com
Small Wonders Softwarehttp://www.smallwonders.com
Smaller Animals Softwarehttp://www.smalleranimals.com
Инструменты командной оболочки SnapFileshttp://www.snapfiles.com
SQLLY Developmenthttp://www.sqlly.com/ib_win_cmdtools.asp
Sysinternalshttp://www.sysinternals.com
SystemTools.comhttp://www.systemtools.com
TotalSharewarehttp://www.totalshareware.com

Поделитесь материалом с коллегами и друзьями