Мордовский государственный университет имени Н.П. Огарева
Опубликован: 12.01.2008 | Доступ: свободный | Студентов: 8757 / 1453 | Оценка: 4.48 / 4.12 | Длительность: 18:38:00
Лекция 9:

Сценарии WSH как XML-документы. Схема WS XML

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >

Примеры сценариев с разметкой XML

Приведем примеры сценариев, иллюстрирующие основные свойства WS-файлов.

Несколько заданий в одном файле

Каждое отдельное задание в WS-файле должно находиться внутри элементов <job> и </job>. В свою очередь, все элементы <job> являются дочерними элементами контейнера <package>.

В качестве примера рассмотрим сценарий multijob.wsf, приведенный в листинге 9.7. Здесь описываются два задания с идентификаторами "VBS" (сценарий на языке VBScript) и "JS" (сценарий на языке JScript).

<package>
<job id="VBS">
<!-- Описываем первое задание (id="VBS") -->
<runtime>
<description>
Имя: multijob.wsf
Описание: Первое задание из multijob.wsf
</description>
</runtime>
<script language="VBScript">
   WScript.Echo "Первое задание (VBScript)"
</script>
</job>
<job id="JS">
<!-- Описываем второе задание (id="JS") -->
<runtime>
<description>
Имя: multijob.wsf
Описание: Второе задание из multijob.wsf
</description>
</runtime>
<script language="JScript">
   WScript.Echo("Второе задание (JScript)");
</script>
</job>
</package>
Листинг 9.7. Файл multijob.wsf

Для того чтобы выполнить первое задание сценария multijob.wsf, которое выведет на экран строку "Первое задание (VBScript)", нужно выполнить одну из следующих команд:

cscript //job:"VBS" multijob.wsf
cscript multijob.wsf
wscript //job:"VBS" multijob.wsf
wscript multijob.wsf

Для запуска второго задания, выводящего на экран строку "Второе задание (JScript)", нужно явно указывать идентификатор этого задания, поэтому используется одна из двух команд:

cscript //job:"JS" multijob.wsf
wscript //job:"JS" multijob.wsf
Использование констант внешних объектов

Для того чтобы в сценарии обращаться по имени к константам, определенным во внешних объектах, не создавая экземпляров самих объектов, необходимо сначала получить ссылку на эти объекты с помощью элемента <reference>.

В листинге 9.8 приведен сценарий refer.wsf, в котором с помощью элемента <reference> производится доступ к трем константам объекта FileSystemObject ( ForReading, ForWriting и ForAppending ), которые определяют режим работы из сценария с внешним текстовым файлом. В результате выполнения сценария refer.wsf на экран выведется диалоговое окно с информацией о значениях констант объекта FileSystemObject.

<job id="Example">
<runtime>
<description>
Имя: refer.wsf
Описание: Использование констант внешних объектов
</description>
</runtime>
<!-- Получаем ссылку на объект FileSystemObject -->
<reference object="Scripting.FileSystemObject"/>
<script language="JScript">
var s;
  s="Значения констант объекта FileSystemObject:\n\n";
  //Получаем значение константы ForReading
  s+="ForReading="+ForReading+"\n";
  //Получаем значение константы ForWriting
  s+="ForWriting="+ForWriting+"\n";
  //Получаем значение константы ForAppending
  s+="ForAppending="+ForAppending;
  //Выводим полученные строки на экран
  WScript.Echo(s);
</script>
</job>
Листинг 9.8. Использование в сценарии констант внешних объектов (файл refer.wsf)
Подключение внешних файлов

К WS-файлу можно подключать "обычные" JScript- или VBScript-сценарии, которые находятся во внешних файлах. Для этого нужно указать путь к этому внешнему файлу в атрибуте src элемента <script>.

Для примера создадим файл inc.js, содержащий строку

WScript.Echo("Здесь выполняется сценарий inc.js");

и файл main.wsf, содержание которого приведено в листинге 9.9.

<job id="Example">
<runtime>
<description>
Имя: main.wsf
Описание: Подключение сценария, находящегося во внешнем файле
</description>
</runtime>
<!-- Подключаем сценарий из файла inc.js -->
<script language="JScript" src="inc.js"/>
<!-- Определяем основной сценарий -->
<script language="JScript">
  WScript.Echo("Здесь выполняется основной сценарий");
</script>
</job>
Листинг 9.9. Подключение внешнего сценария (файл main.wsf)

Если запустить main.wsf с помощью cscript.exe, то на экран выведутся две строки:

Здесь выполняется сценарий inc.js
Здесь выполняется основной сценарий
Различные языки внутри одного задания

Ни в WSH, ни в JScript нет метода или функции, которые позволяли бы в графическом режиме создать диалоговое окно для ввода текста. Однако в языке VBScript имеется функция InputBox, предназначенная как раз для этой цели; используя разметку XML, мы можем легко использовать эту функцию в сценариях JScript. Соответствующий пример приведен в сценарии multilang.wsf (листинг 9.10).

Сначала в этом сценарии на языке VBScript описывается функция InputName, которая возвращает строку, введенную с помощью функции InputBox:

<script language="VBScript">
  Function InputName
  InputName = InputBox("Введите Ваше имя:", "Окно ввода VBScript")
  End Function
</script>

Затем в следующем разделе <script> приводится JScript-сценарий, в котором происходит вызов функции InputName и сохранение возвращаемого ею значения в переменной s:

var s;
    s = InputName();

Значение полученной таким образом переменной s выводится затем на экран:

WScript.Echo("Здравствуйте, "+s+"!");
<job id="Example">
<runtime>
<description>
Имя: multilang.wsf
Описание: Использование функции InputBox в JScript-сценарии
</description>
</runtime>
<script language="VBScript">
  Function InputName  ' Описываем функцию на языке VBScript
  ' Вводим имя в диалоговом окне
  InputName = InputBox("Введите Ваше имя:", "Окно ввода VBScript")
  End Function
</script>
<script language="JScript">
    var s;
    s = InputName();  //Вызываем функцию InputName
    //Выводим значение переменной s на экран
    WScript.Echo("Здравствуйте, "+s+"!");
</script>
</job>
Листинг 9.10 . пользование различных языков внутри одного задания (файл multilang.wsf)
< Лекция 8 || Лекция 9: 1234 || Лекция 10 >
Валентина Тюрина
Валентина Тюрина

Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys.

Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ.

Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре)

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.