В принципе, можно создавать сценарии в Блокноте Windows или в текстовых редакторах файловых оболочек типа Far Manager, а отлаживать их с помощью вывода в нужных местах сценария значений переменных на экран (метод
Echo
объекта WScript
), однако при разработке больших сложных сценариев намного удобнее работать со специализированными редакторами и отладчиками.
Одним из наиболее мощных и удобных редакторов сценариев для Windows является Primalscript, который разработан компанией SAPIEN Technologies, Inc. Последней на момент написания книги являлась версия Primalscript 2.2, ознакомительная 40-дневная версия которой может быть получена с сайта SAPIEN (http://www.sapien.com).
Редактор Primalscript поддерживает среду разработки практически для всех распространенных языков сценариев: JScript, VBScript, Perl, Python, Rexx, TCL, WinBatch, LotusScript и т.д. Для нас самым важным является то, что в Primalscript 2.2 полностью реализована поддержка Windows Script Host 5.6.
Ниже будут описаны основные операции, которые позволяет выполнить Primalscript при работе со сценариями.
Для того чтобы создать новый одиночный сценарий (например, на языке JScript или VBScript), нужно выбрать пункт меню File|New, после чего на экран будет выведено диалоговое окно New, на вкладке Files которого представлен список поддерживаемых типов сценариев (рис. П3.1).
Рис. П3.1. Создание нового сценария — список типов файлов, поддерживаемых Primalscript
Так как локализованных русскоязычных версий программ Primalscript и MS Script Debugger, которые описываются в этом приложении, пока нет (и вряд ли будут), автор специально не указывал перевод команд и пунктов меню на русский язык.
Указав в этом списке нужный тип (например, JScript) и нажав кнопку OK, мы получим в окне редактирования заготовку сценария с заполненным заголовком (рис. П3.2).
Рис. П3.2. Заготовка нового сценария на языке JScript
Открыть уже существующий сценарий можно с помощью пункта меню File|Open. Диалоговое окно открытия файлов позволяет запретить изменения выбранного файла (режим "Только чтение"), а также отобразить этот файл в текстовом (Text) или шестнадцатеричном (Binary) виде (рис. П3.3).
Рис. П3.3. Открытие существующего сценария
Выбранный файл будет отображен в окне редактирования, при этом различные элементы сценария выделены цветом (рис. П3.4).
Рис. П3.4. JScript-сценарий в режиме редактирования
Как и в случае обычного одиночного сценария, новый WS-файл создается с помощью пункта меню File|New, однако в диалоговом окне New нужно выбрать вкладку Workspaces, где представлены несколько мастеров для создания файлов различных типов (рис. П3.5).
Рис. П3.5. Список мастеров для создания файлов различных типов
В этом списке нам нужно выбрать Windows Script Wizard, после чего, на экран будет выведено диалоговое окно, в котором указывается имя создаваемого сценария (Script Name), каталог, в котором он будет храниться (Location), название задания (Job Name) и выбирается используемый язык (Language) (рис. П3.6).
Рис. П3.6. Общая информация о создаваемом сценарии
На втором шаге работы мастера мы указываем, какие внешние объекты будут использоваться в создаваемом сценарии (элемент
). По умолчанию предлагаются объекты Dictionary
, FileSystem
, Network
и Shell
(рис. П3.7).
Рис. П3.7. Выбор внешних объектов, которые будут использоваться в создаваемом сценарии
Кнопка Browse открывает диалоговое окно Select Object, с помощью которого можно выбрать любой зарегистрированный в системе объект (рис. П3.8).
Рис. П3.8. Список зарегистрированных в системе объектов
Третий шаг работы мастера позволяет добавить в создаваемый WS-файл ссылки на нужные библиотеки типов зарегистрированных объектов (элемент
) (рис. П3.9).
Рис. П3.9. Выбор библиотек типов, которые будут использоваться в создаваемом сценарии
Как и на предыдущем шаге, кнопка Browse используется для выбора библиотеки типов, которая не представлена в списке по умолчанию (рис. П3.10).
Рис. П3.10. Список всех библиотек типов
На четвертом шаге требуется указать, какие внешние файлы со сценариями должны быть включены в создаваемое задание (элемент
с атрибутом src
) (рис. П3.11).
Установив флажок Copy files to script folder, можно скопировать выбранные файлы в тот каталог, где будет находиться создаваемый WS-файл.
Рис. П3.11. Подключаемые внешние файлы со сценариями
Пятый шаг является заключительным в работе мастера. Здесь нам выдается вся информация о создаваемом сценарии (рис. П3.12).
Рис. П3.12. Итоговая информация о создаваемом сценарии
Созданный с помощью мастера сценарий отображается в двух окнах (режим workspace) (рис. П3.13).
Рис. П3.13. Просмотр и редактирование WS-файла в режиме workspace
Слева, на панели Workspace Nexus окна Nexus, в графическом виде представлена структура созданного WS-файла. Мы видим, что пока этот файл содержит единственное задание Job1, внутри которого показаны используемые объекты, ссылки на библиотеки типов и подключаемые внешние файлы со сценариями, которые мы задавали при описании WS-файла в мастере, а также раздел с внутренним (Embedded) сценарием.
Справа расположено окно редактирования, в котором показано содержимое внутреннего сценария. По умолчанию здесь создается единственная функция
Job1()
.
От подобного графического представления WS-файла можно всегда перейти к обычному текстовому представлению. Для этого нужно выделить имя WS- файла (самая верхняя строка на панели Workspace Nexus), нажать правую кнопку мыши и выбрать в контекстном меню пункт Open as textfile. После этого в окне редактирования будет полностью показан WS-файл в привычном для нас текстовом виде с цветовым выделением различных элементов (рис. П3.14).
Рис. П3.14. Просмотр и редактирование WS-файла в текстовом виде
Имеющийся на диске WS-файл открывается так же, как и обычный одиночный сценарий — с помощью пункта меню File|Open. Для примера откроем созданный в главе 7 файл PhoneBook.wsf, который содержит четыре задания. По умолчанию этот файл открывается в режиме workspace (рис. П3.15).
Рис. П3.15. Просмотр многозадачного файла PhoneBook.wsf в режиме workspace
При работе с WS-файлом в режиме workspace на панели Workspace Nexus можно производить следующие операции.
□ Добавлять новое задание (элемент
). Для этого нужно выделить имя WS-файла, нажать правую кнопку мыши и выбрать в контекстном меню пункт Add new job to workspace.
□ Удалять имеющееся задание. Для этого требуется выделить нужное задание, нажать правую кнопку мыши и выбрать в контекстном меню пункт Remove job.
□ Определять свойства задания. Для этого нужно выделить задание, нажать правую кнопку мыши, выбрать в контекстном меню пункт Properties. После этого на экран будет выведено диалоговое окно Job Properties, в котором нужно заполнить вкладку Properties (рис. П3.16).
□ Описывать элементы
,
,
и
. Для этого нужно выделить задание, нажать правую кнопку мыши, выбрать в контекстном меню пункт Properties. После этого на экран будет выведено диалоговое окно Job Properties, в котором нужно выбрать вкладку Description, Arguments, Usage или Example соответственно (см. рис. П3.16). Например, на рис. П3.17 представлено содержимое вкладки Arguments для файла ArgMenu.wsf, который мы создали в главе 7.
Рис. П3.16. Определение свойств текущего задания
Рис. П3.17. Диалоговое окно, представляющее содержимое элемента
для файла ArgMenu.wsf
□ Добавлять в задание внешний файл со сценарием (элемент
с атрибутом src
), внутренний сценарий (элемент
без атрибута src
), внешний объект (элемент
), ссылку на библиотеку типов (элемент
), символьную или числовую константу (элемент
). Для этого нужно выделить задание, нажать правую кнопку мыши и выбрать в контекстном меню пункт Add files to job, Add script to job, Add object to job, Add reference to job или Add resource to job соответственно.
□ Изменять свойства у находящихся внутри задания элементов (
,
,
или
). Для этого нужно выделить соответствующий элемент, нажать правую кнопку мыши и выбрать в контекстном меню пункт Properties. После этого на экран будет выведено диалоговое окно (Script Properties, Object Properties, Reference Properties или Resource Properties), в котором можно поменять свойства соответствующего элемента.
□ Удалять находящиеся внутри задания элементы (
,
,
или
). Для этого нужно выделить соответствующий элемент, нажать правую кнопку мыши и выбрать в контекстном меню пункт Remove.
Запуск одиночного сценария, который открыт в активном окне редактирования, производится с помощью пункта Run Script меню Script. При этом сценарий может запускаться как с помощью cscript.exe (устанавливается по умолчанию), так и с помощью wscript.exe, а выводимая сценарием информация может перенаправляться в специальное окно Output редактора.
Нужный режим запуска сценария того или иного типа задается на вкладке Languages диалогового окна Options (пункт меню Tools|Options). Например, на рис. П3.18 приведены настройки, позволяющие запускать JScript-сценарии в графическом режиме без перенаправления вывода в окно Output.
Рис. П3.18. Настройка режима запуска JScript-сценариев
Для запуска активного задания из WS-файла нужно выбрать пункт Run active Job меню Script. Режим запуска заданий настраивается на вкладке WSH диалогового окна Options (пункт меню Tools|Options) (рис. П3.19).
Рис. П3.19. Настройки параметров WS-файлов
Как мы видим, на этой вкладке можно также указать сертификат для цифровой подписи сценария и выбрать один из трех режимов безопасности для выполнения сценариев (см. разд. "Три режима выполнения сценариев WSH" главы 3).
Для того чтобы подписать сценарий в Primalscript, нужно сначала выбрать нужный цифровой сертификат. Имя этого сертификата (Certificate) и, в случае необходимости, хранилище (Store), в котором он находится, указываются на вкладке WSH диалогового окна Options (пункт меню Tools|Options) (см. рис. П3.19). После этого подписывание открытого сценария производится с помощью пункта Sign Script меню Script.
В окне редактирования можно отображать номера строк в колонке слева от текста сценария. За включение/выключение этого режима отвечает переключатель View Line Numbers в меню View. Для перехода к строке с заданным номером нужно нажать
В любое место сценария можно вставить закладку (Bookmark) с помощью нажатия клавиш
Различные элементы сценария (ключевые слова, функции, объекты и т.д.) выделяются в окне редактирования разным цветом. Цветовые схемы выделения для поддерживаемых типов сценариев настраиваются на вкладке Colors диалогового окна Options (пункт меню Tools|Options) (рис. П3.20).
Рис. П3.20. Настройка цветового выделения элементов сценариев различных типов
Для увеличения скорости написания кода сценария можно вставлять в текст шаблоны конструкций определенного языка (например,
switch…case
в JScript или For…To…Step
в VBScript). Для этого в окне Nexus нужно выбрать панель Snippets Nexus (рис. П3.21).
Рис. П3.21. Панель Snippets Nexus окна Nexus
Затем на этой панели следует раскрыть папку, соответствующую нужному языку, и выбрать требуемую конструкцию (рис. П3.22).
Рис. П3.22. Результат вставки шаблона конструкции
Select…Case
языка VBScript
Самое, пожалуй, полезное свойство редактора Primalscript заключается в возможности автоматического завершения вводимых выражений (эта функция имеется практически во всех современных средах разработки типа Microsoft Visual Basic for Applications или Borland Delphi). Например, после ввода имени объекта автоматически появляется список всех свойств и методов этого объекта (рис. П3.23).
Рис. П3.23. Автозавершение ввода — список всех свойств и методов объекта
При выборе из этого списка какого-либо метода на экране появляется подсказка о параметрах данного метода (рис. П3.24).
Рис. П3.24. Автозавершение ввода — список параметров введенного метода
Можно также вывести список свойств и методов для тех объектов, которые были созданы в сценарии ранее. Для этого нужно выделить в тексте имя этого объекта и выбрать пункт List Members меню Edit (рис. П3.25).
Рис. П3.25. Список всех свойств и методов объекта
FileSystemObject
Для получения списка параметров введенной ранее функции (метода объекта) нужно выделить в тексте название этой функции (метода) и выбрать пункт Parameter Info меню Edit (рис. П3.26).
Рис. П3.26. Параметры метода
GetDrive()
Упомянем еще несколько из множества редакторов, которые могут использоваться для создания и изменения сценариев WSH.
Script Editor — программа, входящая в состав Microsoft Office 2000/ХР. В ней имеется функция выделения цветом элементов JScript-, VBScript- и WS-сценариев, а также поддерживается автоматическое завершение ввода ключевых слов.
Aditor — условно-бесплатный редактор файлов текстового формата, который позволяет запускать изменяемые сценарии, не выходя из режима редактирования, а также поддерживает выделение цветом ключевых слов языков JScript и VBScript. Aditor можно загрузить с http://aditor.swrus.com/.
UltraEdit-32 — условно-бесплатный редактор текстовых файлов, обладающий, в целом, теми же возможностями, что и Aditor. Может быть загружен с http://www.ultraedit.com/.
Если при выполнении сценариев возникают ошибки или получаются непредвиденные результаты, можно воспользоваться специальным отладчиком для трассировки сценария и проверки значений переменных. Мы в качестве такого отладчика рассмотрим программу Microsoft Script Debugger, версии которой для различных операционных систем можно бесплатно получить с сайта Microsoft (http://msdn.microsoft.com/scripting). Этот отладчик позволяет работать со сценариями, которые встроены в HTML- или ASP-файлы, а также со сценариями Windows Script Host.
Активизировать отладчик при работе со сценариями можно несколькими способами.
Во-первых, внутри JScript- или VBScript-сценариев можно вставить специальные операторы (
debugger
для JScript и Stop
для VBScript) и выполнить сценарий с параметром //D. Для примера рассмотрим сценарий ForDebug.js, содержимое которого приведено в листинге П3.1.
/*******************************************************************/
/* Имя: ForDebug.js */
/* Язык: JScript */
/* Описание: Сценарий для отладки в Microsoft Script Debugger */
/*******************************************************************/
var s;
function MyFunc() {
WScript.Echo("Функция MyFunc()");
}
WScript.Echo("Это сообщение выведется до запуска отладчика");
debugger;
s="A это сообщение появится ";
s+="уже в отладчике";
WScript.Echo(s);
MyFunc();
/************* Конец *********************************************/
Запустим этот сценарий из командной строки следующим образом:
wscript.exe //D ForDebug.js
Тогда сначала нам будет выведено диалоговое окно со строкой "Это сообщение выведется до запуска отладчика", а после нажатия в этом окне кнопки OK запустится отладчик, и управление передастся ему (рис. П3.27). Далее выполнения сценария может производиться в отладчике (см. следующий раздел).
Файл со сценарием в отладчике доступен только для чтения.
Рис. П3.27. Активизация отладчика с помощью параметра
//D
и специальных операторов
Второй путь активизации отладчика состоит в использовании параметра
//X
при выполнении сценария:
wscript.exe //X ForDebug.js
При этом отладчик запускается сразу, с первой строки сценария (рис. П3.28).
Рис. П3.28. Активизация отладчика с помощью параметра
//Х
Режим отладки WS-файлов зависит от значения атрибута
debug
в инструкции
(см. главу 3).Для примера рассмотрим WS-файл ForDebug.wsf, содержимое которого приведено в листинге П3.2.
Имя: ForDebug.wsf
Описание: WS-файл для отладки в Microsoft Script Debugger
WScript.Echo("Это сообщение выведется до запуска отладчика");
debugger;
WScript.Echo("А это сообщение появится уже в отладчике");
Так как значение атрибута
debug
равно true
, то оператор debugger
передаст управление отладчику, причем, в отличие от одиночного сценария, WS-файл можно запускать как с ключами //D
или //X
, так и без них.
Если же изменить в сценарии ForDebug.wsf инструкцию
следующим образом:
то отладка будет отключена, причем независимо от использования ключей
//D
и //X
при запуске сценария (это может понадобиться при эксплуатировании в рабочем режиме WS-файла, содержащего операторы debug
или Stop
).
Команды, имеющиеся в Microsoft Script Debugger, позволяют выполнять трассировку сценариев, просматривать список вызванных процедур или функций, анализировать и изменять значения переменных.
Для того чтобы установить точку прерывания в определенной строке сценария, нужно поместить курсор в эту строку и нажать
Для удаления одной точки прерывания необходимо поместить курсор в нужную строку и вновь нажать
Открытый в отладчике сценарий может выполняться в разных режимах с помощью соответствующих команд меню Debug.
С помощью команды Debug|Run (или нажатия клавиши Для того чтобы выполнить только один оператор (режим пошагового выполнения), нужно выбрать команду Debug|Step Into или нажать Если в режиме пошагового выполнения в сценарии встречается вызов определенной пользователем процедуры/функции, то возможны два варианта. Продолжая выполнять команду Debug|Step Into, мы будем останавливаться на каждом операторе внутри процедуры/функции. Для того чтобы, находясь внутри процедуры/функции, не проходить оставшиеся операторы по отдельности, можно выполнить команду Debug|Step Out (или нажать Если нет необходимости проверять внутреннюю работу процедуры/функции пользователя, то нужно выбрать команду Debug|Step Over или нажать комбинацию клавиш Команда Debug|Stop Debugging прерывает исполнение сценария и завершает процесс отладки.
В отладчике можно вывести окно Call Stack со списком всех активных процедур и функций сценария. Для этого нужно выполнить команду View|Call Stack. Например, если вызвать это окно, находясь внутри функции
MyFunc()
в сценарии ForDebug.js, то в списке мы увидим название функции MyFunc()
(рис. П3.29).
Рис. П3.29. Окно
Call Stack
Получать и изменять текущие значения переменных или свойств объектов во время остановки исполнения сценария позволяет окно Command, которое вызывается командой View|Command Window. При этом анализ переменных в JScript- и VBScript-сценариях производится следующим образом.
Для просмотра значения переменной в JScript-сценарии нужно в окне Command набрать имя этой переменной и нажать
в сценарии ForDebug.js, мы в окне Command вводим s
и нажимаем s
Чтобы вывести значение переменной в VBScript-сценарии, нужно в окне Command ввести имя этой переменной и поставить перед ним знак
?
. Например,
? s
Рис. П3.30. Просмотр значений переменных в окне
Для изменения значения переменной нужно просто присвоить новое значение этой переменной в окне Command (это относится и к JScript- и к VBScript-сценариям). Например,
s="Новое значение переменной s"