Опубликован: 12.01.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Мордовский государственный университет имени Н.П. Огарева
Лекция 4:

Сервер сценариев WSH. Языки сценариев VBScript и JScript

< Лекция 3 || Лекция 4: 12 || Лекция 5 >
Запуск сценария с помощью меню Пуск

Для запуска сценария с помощью пункта Выполнить (Run) меню Пуск (Start), достаточно написать полное имя этого сценария в поле Открыть (Open) и нажать кнопку Ok. В этом случае по умолчанию сценарий будет выполнен с помощью wscript.exe, т. е. вывод информации будет вестись в графическое диалоговое окно.

Запуск сценария с помощью Проводника Windows (Windows Explorer)

Самым простым является запуск сценария в окнах Проводника Windows или на рабочем столе — достаточно просто выполнить двойной щелчок мышью на имени файла со сценарием или на его значке (аналогично любому другому исполняемому файлу). При этом, как и в случае запуска с помощью меню Пуск (Start), сценарий по умолчанию выполняется с помощью wscript.exe.

Установка и изменение свойств сценариев

В случае необходимости для сценариев можно задавать различные параметры, влияющие на ход их выполнения. Для консольной (cscript.exe) и графической (wscript.exe) версий сервера сценариев эти параметры задаются по-разному.

Если сценарий запускается в консольном режиме, то его исполнение контролируется с помощью параметров командной строки для cscript.exe (см. табл. 4.1), которые включают или отключают различные опции WSH (все эти параметры начинаются с символов "//").

Таблица 4.1. Параметры командной строки для cscript.exe
Параметр Описание
//I Выключает пакетный режим (по умолчанию). При этом на экран будут выводиться все сообщения об ошибках в сценарии
//B Включает пакетный режим. При этом на экран не будут выводиться никакие сообщения
//T:nn Задает тайм-аут в секундах, т. е. сценарий будет выполняться nn секунд, после чего процесс прервется. По умолчанию время выполнения не ограничено
//Logo Выводит (по умолчанию) перед выполнением сценария информацию о версии и разработчике WSH
//Nologo Подавляет вывод информации о версии и разработчике WSH
//H:CScript или //H:Wscript Делает cscript.exe или wscript.exe приложением для запуска сценариев по умолчанию. Если эти параметры не указаны, то по умолчанию подразумевается wscript.exe
//S Сохраняет установки командной строки для текущего пользователя
//? Выводит встроенную подсказку для параметров командной строки
//E:engine Выполняет сценарий с помощью модуля, заданного параметром engine
//D Включает отладчик
//X Выполняет программу в отладчике
//Job:<JobID> Запускает задание с индексом JobID из многозадачного WS-файла (структура WS-файлов будет описана ниже)
//U Позволяет использовать при перенаправлении ввода-вывода с консоли кодировку Unicode

Например, команда

cscript //Nologo C:\Script\First.js

запустит сценарий First.js без информации о версии WSH.

Сценарий можно запускать с параметрами командной строки, которые указываются после имени этого сценария (процедура обработки таких параметров будет описана ниже, при рассмотрении объектов WshArguments, WshNamed и WshUnnamed ). Например, команда

cscript //B C:\Script\First.js /a /b

запустит сценарий First.js в пакетном режиме, при этом /a и /b будут являться параметрами этого сценария, а //B — параметром приложения cscript.exe.

Если сценарий запускается в графическом режиме (с помощью wscript.exe), то свойства сценария можно устанавливать с помощью вкладки Сценарий (Script) диалогового окна, задающего свойства файла в Windows (рис. 4.3).

Установка свойств сценария First.js

Рис. 4.3. Установка свойств сценария First.js

После задания свойств сценария автоматически создается файл с именем этого сценария и расширением wsh, который имеет структуру наподобие ini-файла, например:

[ScriptFile]
Path=C:\Script\First.js
[Options]
Timeout=0
DisplayLogo=1

Если дважды щелкнуть в Проводнике Windows по wsh-файлу или запустить такой файл из командной строки, то соответствующий сервер сценариев (wscript.exe или cscript.exe) запустит сценарий, которому соответствует wsh-файл, с заданными в секции Options параметрами.

При запуске сценариев с помощью wscript.exe для задания параметров командной строки сценария можно использовать технологию drag-and-drop — если выделить в Проводнике Windows несколько файлов и перетащить их на ярлык сценария, то этот сценарий запустится, а имена выделенных файлов передадутся ему в качестве параметров.

Языки VBScript и JScript для сценариев WSH

Как уже отмечалось выше, в принципе сценарии WSH можно писать на любом языке, поддерживающем технологию ActiveX Scripting. Однако для всех таких языков, кроме VBScript и JScript, в системе придется дополнительно устанавливать те или иные модули (библиотеки) поддержки. Поэтому чаще всего при работе с WSH пользуются именно языками VBScript или JScript – сценарии на этих языках гарантированно работают на любой машине с операционной системой Windows.

По синтаксису и стилю программирования эти два языка сильно отличаются друг от друга. Язык JScript — это разработанный Microsoft интерпретируемый объектно-ориентированный язык сценариев, который первоначально предназначался для создания динамических HTML-страниц. Отметим, что JScript не является урезанной версией какого-либо другого языка программирования, хотя по синтаксису он похож на языки Java и C. Язык VBScript (Visual Basic Script Edition) – это облегченная версия языка Microsoft Visual Basic, поэтому для тех, кто программировал на Visual Basic или VBA (Visual Basic for Application) язык VBScript окажется очень знакомым.

Какой именно из языков использовать – в большей степени дело вкуса и привычки. Если вы писали на C или Java, то, скорее всего, остановитесь на JScript; если вы программируете на Visual Basic или VBA (Visual Basic for Application), то очень знакомым вам окажется язык VBScript.

Отметим также, что при выборе языка для написания сценария, обращающегося к внешним объектам (а это делается практически в каждом сценарии Windows), в пользу VBScript можно привести несколько дополнительных аргументов.

Во-первых, VBScript позволяет напрямую в цикле For Each … Next перебирать элементы коллекций (такие коллекции часто являются свойствами внешних объектов), а в JScript для этого приходится использовать вспомогательный объект Enumerator и цикл for с условием завершения и оператором итерации. Рассмотрим следующий пример. Предположим, что переменная Folder является объектом, соответствующим корневому каталогу диска C:, т.е. Folder представляет собой коллекцию, содержащую объекты-файлы, находящиеся в корневом каталоге. Тогда перебор всех этих файлов в VBScript организуется следующим образом:

'Создаем коллекцию Files всех файлов в корневом каталоге диска C:
Set Files = Folder.Files
'Перебираем все элементы коллекции Files
For Each File In Files
  'Выделяем имя файла для текущего элемента File коллекции
  s = s & File.Name & vbCrLf
Next

Аналогичный код на JScript выглядит так:

//Создаем коллекцию файлов
Files=new Enumerator(Folder.Files);
//Цикл по всем файлам
for (; !Files.atEnd(); Files.moveNext()) 
  //Добавляем строку с именем файла
  s+=Files.item().Name+"\n";
//Выводим полученные строки на экран

Во-вторых, VBScript позволяет напрямую вызывать методы объектов WMI (технология WMI будет подробно рассмотрена в следующих лекциях), в то время как в JScript эти методы приходится вызывать с помощью специального объекта SWbemObject, а также объектов InParam (входящие параметры для вызова метода) и OutParam (параметры, формируемые после выполнения метода).

Наконец, подавляющее большинство примеров сценариев, которые можно найти в документации Microsoft или сети Интернет, написаны на VBScript, их можно использовать в своих разработках без изменений, не тратя время на перевод кода на другой язык.

Подробное рассмотрение синтаксиса языков VBScript и JScript выходит за рамки данного курса; ниже в примерах сценариев мы будем преимущественно использовать VBScript.

< Лекция 3 || Лекция 4: 12 || Лекция 5 >
Валентина Тюрина
Валентина Тюрина

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

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

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

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

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

Александр Гордеев
Александр Гордеев
Казахстан, Алматы, ТУРАН
Александр Даниленко
Александр Даниленко
Россия, Москва, 797, 1993