Командная строка и сценарии Windows

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

Разбить на страницы
Показывать лекцию целиком

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

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

Для исправления этой ситуации компанией Microsoft был разработан сервер сценариев Windows Script Host (WSH), с помощью которого можно выполнять сценарии, написанные, в принципе, на любом языке (при условии, что для этого языка установлен соответствующий модуль (scripting engine), поддерживающий технологию ActiveX Scripting). В качестве стандартных языков поддерживаются Visual Basic Script Edition (VBScript) и JScript.

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

Возможности технологии ActiveX

Напомним, что в Windows с самого начала для обеспечения обмена данными между приложениями была разработана технология связывания и внедрения объектов (Object Linking and Embedding, OLE). Вначале технология OLE использовалась для создания составных документов, а затем для решения более общей задачи — предоставления приложениями друг другу собственных функций (служб) и правильного использования этих функций. Технология, позволяющая одному приложению (клиенту автоматизации) вызывать функции другого приложения (сервера автоматизации) была названа OLE Automation. В основе OLE и OLE Automation лежит разработанная Microsoft базовая "компонентная" технология Component Object Model (COM). В общих словах, компонентное программное обеспечение — это способ разработки программ, при котором используются технологии создания программных модулей, подобные технологиям, применяемым для разработки аппаратных средств. Сложные элементные схемы собираются из стандартизированных микросхем, которые имеют четко определенные документированные функции. Разработчик может эффективно пользоваться такими микросхемами, не задумываясь об их внутренней структуре. В программных компонентах, написанных на каком-либо языке программирования, детали реализации используемых алгоритмов также скрыты внутри компонента (объекта), а на поверхности находятся общедоступные интерфейсы, которыми могут пользоваться и другие приложения, написанные на том же или другом языке.

В настоящее время термин OLE используется только по историческим причинам. Вместо него Microsoft с 1996 года использует новый термин — ActiveX, первоначально обозначавший WWW (World Wide Web) компоненты (объекты), созданные на базе технологии COM.

Технология ActiveX длительное время являлась ключевой в продуктах Microsoft. Наиболее полное воплощение она нашла в программах Microsoft Office, Internet Explorer, Internet Information Service (IIS). В эти продукты для управления соответствующими объектами автоматизации были встроены интерпретаторы специальных языков сценариев: VBScript (используется в Microsoft Office, Internet Explorer, IIS) и JScript (используется в Internet Explorer, IIS). Однако непосредственно в операционной системе, вне этих продуктов, выполнять сценарии, написанные на VBScript или JScript, было нельзя.

Сервер сценариев WSH является мощным инструментом, предоставляющим единый интерфейс (объектную модель) для специализированных языков (VBScript, JScript, PerlScript, REXX, TCL, Python и т. п.), которые, в свою очередь, позволяют использовать любые внешние объекты ActiveX. С помощью WSH сценарии могут быть выполнены непосредственно в операционной системе Windows, без встраивания в HTML-страницы.

Назначение и основные свойства WSH

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

Перечислим только наиболее очевидные задачи, для автоматизации которых прекрасно подходят сценарии WSH.

  • Организация резервного копирования на сетевой сервер файлов с локальной машины, которые отбираются по какому-либо критерию.
  • Быстрое изменение конфигурации рабочего стола Windows в зависимости от задач, выполняемых пользователем.
  • Автоматический запуск программ Microsoft Office, создание там сложных составных документов, распечатка этих документов и закрытие приложений.
  • Управление работой приложений, не являющихся серверами автоматизации, с помощью посылки в эти приложения нажатий клавиш.
  • Подключение и отключение сетевых ресурсов (дисков и принтеров).
  • Создание сложных сценариев регистрации для пользователей.
  • Выполнение задач администрирования локальной сети (например, добавление или удаление пользователей).
  • Создание и запуск простейших сценариев WSH

    Простейший WSH-сценарий, написанный на языке JScript или VBScript — это обычный текстовый файл с расширением js или vbs соответственно, создать его можно в любом текстовом редакторе, способном сохранять документы в формате "Только текст".

    Размер сценария может изменяться от одной до тысяч строк, предельный размер ограничивается лишь максимальным размером файла в соответствующей файловой системе.

    В качестве первого примера создадим JScript-сценарий, выводящий на экран диалоговое окно с надписью "Привет!". Для этого достаточно c помощью, например, стандартного Блокнота Windows (notepad.exe) создать файл First.js, содержащий всего одну строку:

    WScript.Echo("Привет!");

    Тот же самый сценарий на языке VBScript, естественно, отличается синтаксисом и выглядит следующим образом:

    WScript.Echo "Привет!"

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

    /*******************************************************************/
    /* Имя: First.js                                                   */
    /* Язык: JScript                                                   */
    /* Описание: Вывод на экран приветствия                            */
    /*******************************************************************/

    На языке VBScript то же самое выглядит следующим образом:

    '*******************************************************************
    ' Имя: First.vbs
    ' Язык: VBScript
    ' Описание: Вывод на экран приветствия
    '*******************************************************************

    Для запуска сценариев WSH существует несколько способов.

    Запуск сценария из командной строки в консольном режиме

    Можно выполнить сценарий из командной строки с помощью консольной версии WSH cscript.exe. Например, чтобы запустить сценарий, записанный в файле C:\Script\First.js, нужно загрузить командное окно и выполнить в нем команду

    cscript C:\Script\First.js

    В результате выполнения этого сценария в командное окно выведется строка "Привет!" (рис. 4.1)

    (рис 4.1) Результат выполнения First.js в консольном режиме (cscript.exe)

    Запуск сценария из командной строки в графическом режиме

    Сценарий можно выполнить из командной строки с помощью (оконной) графической версии WSH wscript.exe. Для нашего примера в этом случае нужно выполнить команду

    wscript C:\Script\First.js

    Тогда в результате выполнения сценария на экране появится нужное нам диалоговое окно (рис. 4.2).

    (рис 4.2) Результат выполнения First.js в графическом режиме (wscript.exe)

    Таким образом, мы видим, что при запуске сценария в консольном режиме, вывод текстовой информации происходит в стандартный выходной поток (на экран), при запуске в графическом режиме — в диалоговое окно.

    Запуск сценария с помощью меню Пуск

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

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

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

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

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

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

    Параметры командной строки для 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).

    (рис 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.

    Страницы:

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

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

    Для исправления этой ситуации компанией Microsoft был разработан сервер сценариев Windows Script Host (WSH), с помощью которого можно выполнять сценарии, написанные, в принципе, на любом языке (при условии, что для этого языка установлен соответствующий модуль (scripting engine), поддерживающий технологию ActiveX Scripting). В качестве стандартных языков поддерживаются Visual Basic Script Edition (VBScript) и JScript.

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

    Возможности технологии ActiveX

    Напомним, что в Windows с самого начала для обеспечения обмена данными между приложениями была разработана технология связывания и внедрения объектов (Object Linking and Embedding, OLE). Вначале технология OLE использовалась для создания составных документов, а затем для решения более общей задачи — предоставления приложениями друг другу собственных функций (служб) и правильного использования этих функций. Технология, позволяющая одному приложению (клиенту автоматизации) вызывать функции другого приложения (сервера автоматизации) была названа OLE Automation. В основе OLE и OLE Automation лежит разработанная Microsoft базовая "компонентная" технология Component Object Model (COM). В общих словах, компонентное программное обеспечение — это способ разработки программ, при котором используются технологии создания программных модулей, подобные технологиям, применяемым для разработки аппаратных средств. Сложные элементные схемы собираются из стандартизированных микросхем, которые имеют четко определенные документированные функции. Разработчик может эффективно пользоваться такими микросхемами, не задумываясь об их внутренней структуре. В программных компонентах, написанных на каком-либо языке программирования, детали реализации используемых алгоритмов также скрыты внутри компонента (объекта), а на поверхности находятся общедоступные интерфейсы, которыми могут пользоваться и другие приложения, написанные на том же или другом языке.

    В настоящее время термин OLE используется только по историческим причинам. Вместо него Microsoft с 1996 года использует новый термин — ActiveX, первоначально обозначавший WWW (World Wide Web) компоненты (объекты), созданные на базе технологии COM.

    Технология ActiveX длительное время являлась ключевой в продуктах Microsoft. Наиболее полное воплощение она нашла в программах Microsoft Office, Internet Explorer, Internet Information Service (IIS). В эти продукты для управления соответствующими объектами автоматизации были встроены интерпретаторы специальных языков сценариев: VBScript (используется в Microsoft Office, Internet Explorer, IIS) и JScript (используется в Internet Explorer, IIS). Однако непосредственно в операционной системе, вне этих продуктов, выполнять сценарии, написанные на VBScript или JScript, было нельзя.

    Сервер сценариев WSH является мощным инструментом, предоставляющим единый интерфейс (объектную модель) для специализированных языков (VBScript, JScript, PerlScript, REXX, TCL, Python и т. п.), которые, в свою очередь, позволяют использовать любые внешние объекты ActiveX. С помощью WSH сценарии могут быть выполнены непосредственно в операционной системе Windows, без встраивания в HTML-страницы.

    Назначение и основные свойства WSH

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

    Перечислим только наиболее очевидные задачи, для автоматизации которых прекрасно подходят сценарии WSH.

  • Организация резервного копирования на сетевой сервер файлов с локальной машины, которые отбираются по какому-либо критерию.
  • Быстрое изменение конфигурации рабочего стола Windows в зависимости от задач, выполняемых пользователем.
  • Автоматический запуск программ Microsoft Office, создание там сложных составных документов, распечатка этих документов и закрытие приложений.
  • Управление работой приложений, не являющихся серверами автоматизации, с помощью посылки в эти приложения нажатий клавиш.
  • Подключение и отключение сетевых ресурсов (дисков и принтеров).
  • Создание сложных сценариев регистрации для пользователей.
  • Выполнение задач администрирования локальной сети (например, добавление или удаление пользователей).
  • Создание и запуск простейших сценариев WSH

    Простейший WSH-сценарий, написанный на языке JScript или VBScript — это обычный текстовый файл с расширением js или vbs соответственно, создать его можно в любом текстовом редакторе, способном сохранять документы в формате "Только текст".

    Размер сценария может изменяться от одной до тысяч строк, предельный размер ограничивается лишь максимальным размером файла в соответствующей файловой системе.

    В качестве первого примера создадим JScript-сценарий, выводящий на экран диалоговое окно с надписью "Привет!". Для этого достаточно c помощью, например, стандартного Блокнота Windows (notepad.exe) создать файл First.js, содержащий всего одну строку:

    WScript.Echo("Привет!");

    Тот же самый сценарий на языке VBScript, естественно, отличается синтаксисом и выглядит следующим образом:

    WScript.Echo "Привет!"

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

    /*******************************************************************/
    /* Имя: First.js                                                   */
    /* Язык: JScript                                                   */
    /* Описание: Вывод на экран приветствия                            */
    /*******************************************************************/

    На языке VBScript то же самое выглядит следующим образом:

    '*******************************************************************
    ' Имя: First.vbs
    ' Язык: VBScript
    ' Описание: Вывод на экран приветствия
    '*******************************************************************

    Для запуска сценариев WSH существует несколько способов.

    Запуск сценария из командной строки в консольном режиме

    Можно выполнить сценарий из командной строки с помощью консольной версии WSH cscript.exe. Например, чтобы запустить сценарий, записанный в файле C:\Script\First.js, нужно загрузить командное окно и выполнить в нем команду

    cscript C:\Script\First.js

    В результате выполнения этого сценария в командное окно выведется строка "Привет!" (рис. 4.1)

    (рис 4.1) Результат выполнения First.js в консольном режиме (cscript.exe)

    Запуск сценария из командной строки в графическом режиме

    Сценарий можно выполнить из командной строки с помощью (оконной) графической версии WSH wscript.exe. Для нашего примера в этом случае нужно выполнить команду

    wscript C:\Script\First.js

    Тогда в результате выполнения сценария на экране появится нужное нам диалоговое окно (рис. 4.2).

    (рис 4.2) Результат выполнения First.js в графическом режиме (wscript.exe)

    Таким образом, мы видим, что при запуске сценария в консольном режиме, вывод текстовой информации происходит в стандартный выходной поток (на экран), при запуске в графическом режиме — в диалоговое окно.

    Запуск сценария с помощью меню Пуск

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

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

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

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

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

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

    Параметры командной строки для 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).

    (рис 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.

    Вернуться к учебному плану