В статье "Windows Script Host: типы файлов", мы говорили о том, что Windows Script Host (WSH) представляет собой реализованный на базе технологии COM сервер, предназначенный для выполнения сценариев в среде Windows. В нем изначально имеется поддержка языков JScript и VBScript, однако возможно использование и других языков, если будут дополнительно установлены соответствующие компоненты.

Посредством WSH могут выполняться как автономные сценарии (т.е. написанные на каком-то определенном языке), так и сценарии .wsf (Windows Script file). Сценарии последнего типа представляют собой текстовые файлы формата XML, которые могут содержать код, реализованный более чем на одном языке. И хотя эти сценарии имеют несколько более сложную структуру, они предоставляют в распоряжение разработчика ряд полезных возможностей, которые весьма затруднительно реализовать в автономных сценариях.

Формат XML файлов .wsf

Формат XML, который используется в файлах .wsf, во многом похож на тот, что применяется в HTML. В XML используются теги разметки, заключаемые в угловые скобки (<>), называемые элементами, которые описывают данные файла. Полный перечень элементов XML, используемый в файлах .wsf можно найти по адресу: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsorixmlelements.asp. Ниже приводится краткий обзор синтаксиса XML:

  1. Для того чтобы указать, что файл имеет формат XML, он должен начинаться с элемента .
  2. Все элементы чувствительны к регистру и должны заключаться в угловые скобки.
  3. Тег, открывающий элемент, должен иметь вид <имя_элемента>, в закрывающем теге после открывающей угловой скобки должен стоять символ прямого слеша, после которого следует имя элемента (т.е. .
  4. Элемент может иметь один или несколько атрибутов, которые записываются в виде атрибут="значение". Значение атрибута должно быть заключено в двойные кавычки. Например, <элемент атрибут1= "значение1" атрибут2="значение2">.
  5. Если у элемента нет закрывающего тега, то в этом случае в открывающем теге перед закрывающейся угловой скобкой необходимо использовать символ прямого слеша. Пример: <элемент атрибут="значение"/>.
  6. Элемент может включать в себя другие элементы, но в этом случае теги не должны перекрываться (т.е. открывающий и закрывающий теги внутреннего элемента должны предшествовать закрывающему тегу внешнего элемента).
  7. Допускается использование элементов-комментариев, что осуществляется путем вставки текста между открывающим тегами.

Если используется тег , то в этом случае символы угловых скобок (< и >) и знак амперсанда (&) имеют специальное значение для обработчика XML, и когда он встречает их в содержимом элемента, то заменяет на последовательности символов &lt;, &gt;, и &amp, соответственно.

Однако эти символы достаточно часто встречаются в коде VBScript и JScript. Поэтому чтобы исключить замену этих элементов в тексте сценариев, и вместе с тем избежать проблем обработки XML, фрагменты кода VBScript и JScript нужно размещать внутри маркеров .

В Листинге 1 показан минимальный набор элементов XML для построения сценария .wsf. Он должен содержать хотя бы один элемент . Внутри элемента . Во-вторых, не требуется указывать полный путь к подключаемому файлу. Если не указано иное, сервер WSH предполагает, что этот файл хранится в том же каталоге, что и сценарий.

Также следует обратить внимание на то, что файл, на который организуется ссылка, содержит только код на соответствующем языке сценариев, и в нем нет никаких элементов XML. Например, код из другого файла .wsf подключить нельзя.

Самодокументирующиеся сценарии

Для того чтобы сделать сценарий самодокументирующимся в элемент файла .wsf можно добавить элемент , внутрь которого включить набор элементов. В этом случае, когда в строке запуска сценария указывается аргумент /? или вызывается метод ShowUsage объекта WScript .Arguments, WSH выводит на экран краткое сообщение, базирующееся на содержимом элементов . Элемент может включать следующие элементы:

Элемент <description>. Внутри элемента должно содержаться краткое описание сценария. Если сценарий запускается с аргументом /? или вызывается метод ShowUsage объекта WScript .Arguments, то в этом случае WSH автоматически выводит на экран текст, заключенный между тегами и . При этом на экран выводится все, что заключено между этими тегами, включая переходы на новую строку, пробелы и табуляцию.

Элемент <unnamed>. В элементе содержится описание неименованных аргументов сценария (т.е. тех аргументов, имена которых не начинаются с символа прямого слеша (/)). У данного элемента нет закрывающего тега, но он имеет два обязательных атрибута: name (имя), определяющий имя аргумента, и атрибут helpstring (справочная строка), который содержит описание аргумента. Также имеется третий, дополнительный, атрибут required (необходимо), который может иметь значения "true" или "false"; таким образом определяется, нужно ли заключать имя аргумента в квадратные скобки ([ ]) в справочном сообщении об использовании. По умолчанию используется значение "false".

Кроме того, элемент может включать в себя атрибут many, который также должен иметь булево значение (т.е. "true" или "false"). Если он равен "true", то в справочном сообщении будет показываться, что данный аргумент может использоваться более одного раза, при этом в конце имени аргумента ставится номер и многоточие (...). Если задано many="true", то необходимо также использовать атрибут, определяющий нужное количество аргументов.

Элемент <named>. Элемент описывает именованные аргументы сценария (т.е. те аргументы командной строки, которые начинаются с символа прямого слеша (/)). Элемент не имеет закрывающего тега и требует наличия атрибутов name и helpstring, содержащих, соответственно, имя и описание именованного аргумента. Если здесь добавить атрибут required="true", то в справочном сообщении имя аргумента все равно не будет заключаться в квадратные скобки.

Здесь существует также дополнительный атрибут type (тип), определяющий тип данных аргумента, он может принимать значения "string", "boolean", или "simple". По умолчанию используется значение "simple". Значение этого атрибута влияет на отображение справочного сообщения. Если выбрано type="string", то к аргументу добавляется символ двоеточия (:) и слово value, указывающее на необходимость ввода значения. Если выбрано type="boolean", то в этом случае к аргументу добавляется строка [+|-], а это говорит о том, что после имени аргумента необходимо задать символ плюс (+) или минус (-). Если же выбирается type="simple" (либо данный атрибут опущен), аргумент отображается "как есть".

Важно отметить, что элементы и определяют только ту информацию, которая будет отображаться в справочном сообщении, когда в команде запуска сценария используется аргумент /? либо вызывается метод ShowUsage объекта WScript .Arguments и не более того. Эти элементы не выполняют никакой проверки правильности задания аргументов командной строки, они просто содержат справочные данные о том, какими эти аргументы должны быть.

Элемент <example>. Элемент не является обязательным, в нем можно указать какой-либо пример корректного вызова сценария. Он будет отображаться на экране после описаний аргументов командной строки. Как и в случае элемента , на экран выводится все содержимое, заключенное между тегами и , включая переходы на новую строку, пробелы и табуляцию.

Элемент <usage>. Если вас не устраивает текст, который отображается в справочном сообщении по умолчанию, то с помощью элемента его можно заменить. Чтобы облегчить понимание сценария для пользователя, можно по-прежнему задействовать другие элементы . Как и для элементов и , на экран выводится все содержимое, заключенное между тегами и , включая переходы на новую строку, пробелы и табуляцию.

В Листинге 3 приведен пример сценария, в котором применяются элементы , и , а на Рисунке 1 показано сообщение, выводимое сценарием при его запуске через сервер сценариев WScript. Обратите внимание, что в элементах атрибут required="true" не используется, поэтому аргументы отображаются в квадратных скобках, что указывает на то, что они не являются обязательными.

Многоязычные сценарии

Еще одной сильной стороной сценариев .wsf является возможность включения в них кода, написанного на разных языках. Соответственно, элемент может содержать более одного элемента

 


Листинг 2: Подключение кода из файла автономного сценария





 


Листинг 3: Сценарий, демонстрирующий использование элементов





Данный сценарий демонстрирует элементы WSF runtime.

  name="computer"
  helpstring="Компьютер, к которому выполняется подключение"
  required="true"
/>
  name="username"
  helpstring="Имя пользователя для подключения (не обязательно)"
  type="string"
/>
  name="password"
  helpstring="Пароль для подключения (не обязательно)"
  type="string"
/>


 


Листинг 4: Пример простого многоязычного сценария







Листинг 5: Пример простого многозадачного сценария