Семейство технологий Windows Scripting является неотъемлемой составной частью операционной системы (сами догадайтесь, какой) на протяжении уже многих лет и, соответственно, многих версий. Думаю, эти технологии могут пригодиться как "простым" пользователям, так и разработчикам программного обеспечения, и поэтому хочу сказать о них несколько слов. Конечно, вам может показаться, что слов будет не так уж и мало, но, тем не менее, всё же сразу хочу предупредить, что эта статья ни в коей мере не претендует на полный охват данной темы и носит, скорее, чисто ознакомительный характер.
Итак, что же представляют собой технологии, название которых указано в заголовке статьи? Это семейство библиотек, приложений и компонентов для работы со скриптами в операционной системе Windows. Что такое скрипт? С английского языка слово script наиболее точно переводится на русский как "сценарий". В данном случае под сценарием понимают программу, написанную на каком-то макроязыке. Что такое макроязык и чем он отличается от обычных, нормальных и полноценных, языков программирования? Фактически, только тем, что программа на макроязыке не нуждается ни в какой дополнительной подготовке перед запуском - т.е. её не надо компилировать ни в машинный код, ни в какой-то промежуточный, как это нужно делать в "больших" языках. С одной стороны, это, конечно, достаточно удобно, но, с другой, существенно ограничивает саму программу. Для её запуска необходим исходный текст, и, таким образом, о её коммерческом распространении по типу shareware можно для большинства макроязыков спокойно забыть. Кроме того, для её запуска нужна другая программа - интерпретатор, который и будет выполнять код сценария. Естественно, скорость выполнения также не является сильным местом программ-скриптов. Зато там, где все эти минусы не критичны, скрипты активно используются и приносят человечеству немалую пользу. Самый яркий пример - это, конечно же, использование макроязыка JavaScript во Всемирной паутине. Другая, не менее хорошая иллюстрация на тему скриптов - макросы в Microsoft Office.
Обратите внимание, что я говорю о том, что Windows Scripting - это целое семейство технологий. Настало время сказать, наконец, из чего же оно состоит. Microsoft Visual Basic Scripting Edition (VBScript) и Microsoft JScript - это интерпретаторы сценариев на языках VBScript и JScript, соответственно. Эти интерпретаторы являются компонентами браузера Internet Explorer, который встроен в систему, начиная с Windows 98, то есть, фактически, они присутствуют на львиной доле всех компьютеров под управлением Windows. Именно это обстоятельство, ко всему прочему, позволяет существовать огромной орде макровирусов, гуляющей по просторам интернета. Для того чтобы запустить такой вирус, совсем не обязательно запускать Internet Explorer. Потому что за выполнение скриптов (в том числе, и вредоносных) в системе ответственен член этого семейства под названием Windows Script Host. Ещё одной немаловажной составляющей является Windows Scripting Components. Благодаря нему есть возможность создавать в скриптах COM-объекты (т.е. реализовывать их на макроязыках). Скриптовые интерпретаторы также можно внедрять в обычные Windows-приложения, и тут не обошлось без вездесущей технологии COM. Для использования движков VBScript и JScript ответственность несут Windows Script Interfaces. Также в семейство Windows Scripting входят отладчик сценариев Microsoft Script Debugger и их шифровальщик Script Encoder.
Многие читатели скажут, что я не назвал одной важной вещи, также имеющей отношение к скриптам в Windows. Вещь эта - не что иное, как Active Server Pages (ASP). Сейчас уже, правда, актуальнее будет сказать ASP.NET, хотя эти технологии и имеют довольно существенные отличия. ASP (имеется в виду "классическая" версия, а не ASP.NET) - технология, встроенная в web-серверы корпорации Microsoft. Говоря в общих чертах, она позволяет внедрять код на JScript или VBScript в web-страницу и выполнять его до отправки этой страницы на компьютер конечного пользователя, т.е. на сервере. Однако в данной статье мы рассматривать Active Server Pages более подробно не будем. Во-первых, сама Microsoft позиционирует ASP как отдельную технологию, а не часть Windows Scripting. И это правильно, потому что её возможности не заканчиваются на скриптах. Во-вторых, трудно было бы рассмотреть в одной статье технологию, которой посвящено немалое количество солидных книг. А в-третьих, как я уже говорил, ASP уже морально устарела, и на смену ей пришла ASP.NET, о которой и вовсе можно говорить практически бесконечно.
Итак, вернёмся к нашим, с позволения сказать, баранам. Лучше бы, наверное, сказать как-то по-другому, но пословица есть пословица. Поговорим о языках сценариев. VBScript - это вариации на тему Visual Basic. Если вы работали с макросами, написанными на VBA, в Microsoft Office, то уже приблизительно знаете, что такое VBScript. Файлы, в которых содержатся сценарии на VBScript, обычно имеют расширение vbs. JScript - язык, очень близкий к JavaScript, однако имеющий свои особенности. Сама Microsoft утверждает, что он совместим со спецификацией ECMA 262, а все расхождения с ней - это побочные эффекты обратной совместимости. Не уточняется, правда, совместимости с чем. Файлы со скриптами на этом языке имеют расширение js. Для запуска на выполнение скрипта под управлением Windows Script Host можно просто щёлкнуть дважды по его значку в "Проводнике", а можно набрать в командной строке (кнопка "Пуск" -> "Выполнить") "cscript <имя файла>" или "wscript <имя файла>". Первый вариант команды выполнит сценарий в консольном режиме, а второй - в оконном.
Интересной особенностью скриптовых языков VBScript и Jscript является поддержка объектной идеологии программирования. Объектами могут быть файлы, папки, окна, принтеры, ключи реестра - в общем, практически всё, с чем можно из этих языков работать. Но Windows Script Host поддерживает, вообще говоря, не только эти два языка. В качестве примеров других скриптовых языков в документации указываются Rexx, Python, Perl. Подробности можно узнать на сайте поддержки семейства технологий Windows Scripting, расположенном по адресу msdn.microsoft.com/scripting. Ещё одной интересной особенностью Windows Script Host является возможность комбинирования нескольких скриптовых файлов в одном сценарии, причём "смешивать" можно даже сценарии на разных языках. Для этого используются специальные файлы с расширением wsf. Внутри они являются обычными XML-файлами, правда, размеченными специальным образом. Такие файлы тоже можно запускать на исполнение, как и обычные сценарии на любом скриптовом языке, поддерживаемом Windows Script Host. Приведем простой пример такого WSF-файла, который использует Jscript-функцию для подсчёта свободного места на диске "c:\" и VBScript-функцию для вывода результата на экран.
<job id="IncludeExample"> <script language="JScript"> function GetFreeSpace(drvPath) { var fs, d, s; fs = new ActiveXObject("Scripting.FileSystemObject"); d = fs.GetDrive(fs.GetDriveName(drvPath)); s = "Диск " + drvPath + " - " ; s += d.VolumeName; s += " Свободное место: " + d.FreeSpace/1024 + " Кб"; return s; } </script> <script language="VBScript"> s = GetFreeSpace("c:") WScript.Echo s </script> </job>
Теперь поговорим немного о внедрении встроенных в систему интерпретаторов сценариев в прикладные приложения. Сделать это можно только в случае, если язык и компилятор, которыми вы пользуетесь при разработке своего приложения, поддерживают в достаточной мере технологию Microsoft COM. Для работы со скриптовыми движками используются интерфейсы IActiveScript, IActiveScriptParse, IActiveScriptSite, IActiveScriptSiteWindow. Приложение взаимодействует с движком следующим образом: сначала создаётся экземпляр движка, потом загружается текст сценария или создаётся пустой сценарий. Далее проводится загрузка специальных именованных объектов, внедрённых в сценарий (как, например, формы на Web-странице), причём за их загрузку отвечает не сам движок, а использующее его приложение. Дальше приложение подаёт движку сигнал, что пора выполнить сценарий, причём во время выполнения скрипта движок передаёт использующему его приложению информацию обо всех произошедших событиях. Движок автоматически получает доступ ко всем объектам, используемым в скрипте, при помощи стандартных COM-механизмов (если точнее, даже не просто COM, а OLE).
Корпорация Microsoft предоставляет ActiveX-компонент Microsoft Scripting Control, который также можно использовать в прикладных программах для выполнения сценариев. Подробную информацию о нём можно получить по приведенному выше web-адресу.
Теперь поговорим о создании скриптовых COM-компонентов. Для чего это вообще нужно? Microsoft, авторы этой диковатой, на первый взгляд, идеи, называют следующие преимуществе скриптовых COM-компонентов перед обычными: малый размер, сравнительно малые затраты на создание и распространение, лёгкость настройки. При этом использовать такие компоненты предлагается для написания бизнес-логики многозвенных приложений, при работе с базами данных, для создания интерактивных эффектов на web-страницах. Работа скриптовых компонентов происходит при самом непосредственном участии scrobj.dll, которая, собственно, и обрабатывает все вызовы. Сам компонент помещается в файл с расширением wsc, представляющий собой внутри XML, содержащий перечень используемых интерфейсов и реализуемых методов. Структура файла компонента, в целом, довольно проста, поэтому нет особого смысла приводить её пример.
В завершении статьи стоит, как мне кажется, сказать несколько слов о полезной для тех, кто вплотную занимается скриптами, утилите под названием Script Encoder. Эта программа поможет разработчикам скриптов скрыть от любопытных глаз содержимое своих разработок. Текст программы станет недоступным, но она всё равно сможет выполняться на web-сервере (насчёт Windows Script Host в документации написано расплывчато, но тесты показывают, что он такие программы тоже "проглатывает"). Правда, конечно, никто не запретит посмотреть, что именно ваш скрипт делает в процессе своей работы, да и хакеров эта утилита тоже вряд ли остановит. Запускается Script Encoder из командной строки и работает в консольном режиме. Для её использования в командной строке нужно набрать "screnc <имя входного скрипта> <имя выходного зашифрованного файла>". Скачать программу можно с сайта Microsoft.
Что ж, подведём итоги. Windows Scripting - обширное семейство технологий от Microsoft, находящее самое разнообразное применение в жизни программистов, пользователей и, конечно же, в первую очередь, системных администраторов. Все тонкости и нюансы Windows Scripting не втиснешь в рамки одной статьи. Но, как поётся в известной песне, "этот мир придуман не мной", и ограничения на объём статей, соответственно, ввёл не я, а кто-то другой. Поэтому воспринимать эту статью стоит только как краткий обзор технологий семейства Windows Scripting. Надеюсь, сумел сообщить вам кое-что полезное.
Вадим СТАНКЕВИЧ
Горячие темы