Знакомство с ws-файлами (windows script file)

Знакомство с ws-файлами (windows script file) Примеры скриптов и макросов для Word и WSH

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 ) я опишу в остальных постах, а то статья и так довольно громоздкая получилась.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий