Windows Script Host предоставляет пользователю такую полезность, как ws-файл, это файлы с расширением .wsf (windows script file). Полезность заключается в том, что в одном сценарии вы можете использовать сразу несколько скриптовых языков программирования (vbscript, jscript, perl или phyton). Давайте перейдем непосредственно к описанию основных преимуществ ws-файлов (windows script file):
Как я уже сказал, возможность использовать в одном сценарии несколько языков
- Подключение внешних файлов
- Возможность вызывать функции одного языка в другом
- Определение нескольких задач в теле сценария
В отличии от js и vbs файлов, ws (windows script file) сценарии требуют использования xml разметки, которая. Давайте напишем простой пример, что бы вы сразу увидели что и как:
<job id="ID1"> <!-- ***************************** --> <!--файл ws --> <!-- echo.wsf --> <!-- ***************************** --> <script language="JScript"> WScript.Echo ("Первое сообщение"); </script> <script language="VBScript"> WScript.Echo "Второе сообщение" </script> </job> |
В данном примере используется несколько XML элементов:
<job id=»ID1″>…</job> — элемент jobпозволяет задать в сценарии несколько заданий, доступ к которым осуществляется по значению параметра id, в данном случае задание лишь одно.
<!— … —> — как вы уже поняли, в середине этих тегов прописывается комментарий, они не обязательно должны быть в одной строке, такой вариант тоже верен:
<!-- ***************************** файл ws echo.wsf ***************************** --> |
<script language=» «>…</script> — между этими тегами прописывается код сценария, язык определяется параметром language. В данном примере мы одновременно использовали синтаксис Jscript и VBScript.
Хорошо, теперь давайте попробуем расширить возможности сценария:
<!-- ***************************** файл ws job.wsf пример использования элемента <job> ***************************** --> <package> <job id="ID1"> <script language="VBScript"> WScript.Echo "Первое задание" </script> </job> <job id="ID2"> <script language="JScript"> WScript.Echo ("Второе задание"); </script> </job> </package> |
Тут у нас появился новый элемент <package>…</package>, он нужен в тех WS-файлах, для которых прописано более одного задания. Так, мы прописали два задания с идентификаторами ID1 и ID2. Если WS-файл содержит лишь одно задание, то надобности в … нет. Как видим, в первом задании выполняется код на VBScript, а во втором – на JScript, если теперь запустить сценарий, то появится лишь первое сообщение. Что бы вызвать из ws-файла .wsf (windows script file) нужное нам задание, надо прибегнуть к помощи командной строки:
cscript //job:»ID2″ job.wsf
или
wscript //job:»ID2″ job.wsf
Тут мы использовали параметр //job сервера Windows Script Host, после двоеточия прописывается идентификатор задания и путь к ws-файлу. В первом запуск производится в консольном режиме, а во втором – в стандартном оконном.
Теперь давайте посмотрим на то, как происходит подключение внешних файлов для сценариев windows script file. Создайте предварительно файл hello.js со следующей строкой:
WScript.Echo («Это внешний файл»);
Теперь в том же каталоге создайте ws файл с именем src.wsf и пропишите в нем следующий код:
<job id="T1"> <script language="JScript" src="hello.js"/> <script language="VBScript"> WScript.Echo "Код сценария" </script> </job> |
Тут атрибут src позволяет подключить внешний сценарий, в нашем случае это hello.js. После запуска скрипта, появятся два сообщения.
Подключение внешних файлов
Хорошо, тепеь представим ситуацию, что у нас есть сценарий (function.vbs), в котором прописана функция, что бы ее не копировать в тело сценария windows script file, мы можем просто увказать ссылку на function.vbs и так вызвать функцию. Файл function.vbs будет содержать следующий код:
Function WSHInputBox(Message, Title, Value) WSHInputBox = InputBox(Message, Title, Value) End Function |
А в наш ws-файл (function.wsf) пропишем следующее:
<!-- ***************************** файл ws function.wsf ***************************** --> <job id="T1"> <script language="VBScript" src="function.vbs"/> <script language="JScript"> var title = "Функция InputBox"; var prompt = "Введите любой текст:"; // Открыть диалоговое окно ввода с помощью функции, определенной в function.vbs var result = WSHInputBox(prompt, title, "Ваш текст"); // Проверить, не щелкнул ли пользователь кнопку Cancel, if (result != null) { // Получить введенную информацию. WScript.Echo("Вы ввели: " + result); }else{ // Пользователь щелкнул кнопку Cancel. WScript.Echo("Вы нажали Отмена"); } </script> </job> |
Тут мы с начало подключаем файл function.vbs, в нем прописана функция WSHInputBox, которая в свою очередь вызывает функцию InputBox (поддерживается только в языке VBScript). Сделав такое преобразование, мы смогли вызвать в теле js кода функцию языка vbscript.
Способы обработки ws-файлов
Те примеры что были выше, содержат нестрогий синтаксис языка XML — не предполагается выполнение всех требований стандарта XML (регистр символов, заключение атрибутов в двойные кавычки.)
Однако, если windows script file станет обрастать зарезервированными для XML символами или словами как разметки XML, то произойдет сбой. В таком случае стоит применять строгую разметку. Для того чтобы задать режим строгой обработки сценария, нужно поместить элемент <?xml?> в самой первой строке сценария — никаких других символов или пустых строк перед ним быть не должно. При такой обработке WS-файла нужно четко следовать всем правилам стандарта XML. Код сценария должен быть помещен в секцию CDATA, которая начинается с символов «<![CDATA[» и заканчивается символами «]]>». Например:
<?xml version="1.0" encoding="ISO-8859-1"?> <!--файл ws--> <!-- xml.wsf--> <job id="T1"> <script language="VBScript"> <![CDATA[ WScript.Echo "Hello" ]]> </script> </job> |
Хорошо, на этом пока все, остальные возможности сценариев windows script file (файлов ws ) я опишу в остальных постах, а то статья и так довольно громоздкая получилась.