Запуск vbs скрипта из командной строки. Запуск процесса на удалённом компьютере – VBS Remote Scripting

7. Работа с окнами и приложениями

Запуск внешних приложений из скрипта VBScript, применение объекта WshShell, методы Run(), AppActivate(), SendKeys()

7.1 Возможности объекта Wscript.Shell

Запуск приложения производится при помощи объекта WScript .Shell . Первая строка для работы с этим объектом выглядит как

Dim WshShell

set WshShell = WScript.CreateObject("WScript.Shell")

Сам запуск производится при помощи метода Run :

WshShell .Run "Имя_приложения"

Необязательные параметры: цифра (1-10) - вид диалогового окна, true /false - приостанавливать выполнение скрипта пока не завершится работа программы или нет.

Обычно существует две ситуации, когда нам нужно запустить приложения из скрипта:

1) запускаем утилиты командной строки (например, из Resource Kit ) и нам нужно получить то, что они возвращают

2) запускаем графическое приложение и передаем туда нажатия клавиш

При запуске утилиты командной строки обратить внимание на следующие моменты:

o если нам нужно возвращать код ошибки , делаем это следующим образом:

sReturn = WshShell.Run("ping " & "192.168.1.2", 1, TRUE)

обязательно должно стоять ключевое слово TRUE , иначе возвращаемый код всегда будет 0;

o если нужно получить вывод от утилиты, записываем его при помощи > в текстовый файл, затем открываем на чтение при помощи FSO , скачиваем в переменную и удаляем. В переменной можно искать значение при помощи функции inStr (не найдено - 0, найдено - значение, отличное от 0).

o если используете не исполняемые файлы, а команды интерпретатора (DIR , CD , MD и т.п.), то команда на запуск должна выглядеть как

WshShell.Run("%COMSPEC% /K dir")

%COMSPEC % - чтобы не выяснять, какой командный интерпретатор работает, /K - чтобы не закрывалось окно командного интерпретатора.

o для того, чтобы не зависеть от наличия утилит на компьютере пользователя, есть смысл выложить используемые утилиты на сервер в сети и обращаться к ним по сетевому имени;

o для того, чтобы запустить утилиту с измененным приоритетом, можно использовать команду интерпретатора Start .

При запуске графического приложения обычно есть необходимость передать в него нажатия клавиш. Для этой цели используются методы AppActivate (передача фокуса окну приложения) и SendKeys (передать нажатия клавиш)

Метод AppActivate позволяет передать фокус приложению. Ему передается заголовок окна приложения:

WshShell.Run "calc"

WScript.Sleep (200)

WshShell.AppActivate "Calculator"

WScript.Sleep (200)

Будьте внимательны - заголовок окна может быть разным! Поэтому лучше использовать централизованные копии своих приложений на сервере. Кроме того, желательно делать паузы после запуска приложения и передачи ему фокуса, чтобы операция успела выполниться

WshShell .SendKeys ("1{+}");

WScript.Sleep(500);

WshShell.SendKeys("2");

WScript.Sleep(500);

WshShell .SendKeys ("~");

Подробное описание того, как передавать нажатия тех или иных клавиш методом SendKeys - в документации.

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

Инструкция

  • Запустите файл с расширением *.vbs двойным кликом мыши или вызовите его по имени в консоли. Для этого зайдите в меню пуск/выполнить и наберите путь к необходимому файлу в открывшемся окошке. Это самый обычный текстовый документ, который легко можно править в блокноте. Данный метод самый понятный и простой, но иногда в силу определенных обстоятельств он не срабатывает (система не поддерживает формат, слетела кодировка и т.д.).
  • Если файл с расширением *.vbs не открывается, проверьте наличие интерпретаторов языка VBS. Их в системе должно быть два: консольный CScript и оконный WScript (вместе они – Windows Script Host или WSH). Они, по идее, должны сразу устанавливаться вместе с системой, но иногда так получается, что они либо повреждены, либо вообще не установлены (может быть на старых версиях систем). Если интерпретаторов нет в наличии, установите их на свой компьютер и запустите скрипт двойным щелчком мыши.
  • Создайте обыкновенный текстовый файл с расширением txt. Скопируйте туда данный текст:Sub Run(ByVal sFile)Dim shellSet shell = CreateObject("WScript.Shell")shell.Run Chr(34) & sFile & Chr(34), 1, falseSet shell = NothingEnd SubRun "C:/Program Files/FileZilla FTP Client/filezilla.exe"Естественно, путь заменяете своим исполняемым файлом. Затем переименуйте созданный ранее txt-файл на vbs расширение. Для проверки щелкните два раза по нему мышкой, и по указанному пути запустится программа.
  • Для того чтобы обратиться к методу Windows Script Host, укажите объект и метод с нужными параметрами (через точку). Свойства WSH указываете также, но их можно и назначать и считывать в переменные и остальные свойства. Всегда учитывайте тип данных свойств и переменных, в противном случае сценарий будет выдавать ошибку о несовместимости типов данных.
  • Да, как ни странно у VBScript (точнее у Windows Scripting Host) тоже есть возможности запуска скриптов на удалённых компьютерах. Правда эта функция не получила большой популярности, и скорее всего из за того что требует немало подготовительных мероприятий, которые крайне плохо документированы.

    Итак, для запуска скрипта на другом компьютере с помощью VBS нам понадобится:

    1. Права администратора на удалённом компьютере. Ну это само собой разумеется, и требуется почти во всех методах запуска которые я перечислял в блоге.
    2. Разрешить WSH Remote Scripting создав строковой параметр Remote равный “1” в ключе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings
    3. Из за бага , на системах с Windows XP необходимо выполнить команду wscript –regserver. В SP3 ошибка вроде как исправлена.
    4. Необходимо отключить Firewall (или разрешить обращения к DCOM в исключениях) на обоих компьютерах. Да, да, и на том с которого запускаете сценарий, тоже (спасибо Косте Леоньтеву, я бы не догадался 🙂)
    5. В системах XP SP2 и выше необходимо изменить параметры безопасности (это можно сделать с помощью групповой политики). В узле Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\ меняем разрешения следующим образом:
      1. DCOM: Machine Access Restrictions in Security Descriptor Definition Language (SDDL) syntax
        Выдать группам Anonymous Logon и Everyone разрешения Allow Local и Allow Remote Access
      2. DCOM: Machine Launch Restrictions in Security Descriptor Definition Language (SDDL) syntax
        Группе Administrators разрешения Allow Local Launch, Allow Remote Launch, Allow Local Activation, Allow Remote Activation
        Группе Everyone – Allow Local Launch, Allow Local Activation.

    Всё! 🙂 Теперь можно пользоваться 🙂

    Для примера создадим сценарий c:\test.vbs (он будет запущен на удалённом компьютере):

    Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTSOut = objFSO.CreateTextFile("C:\log.txt", True) objTSOut.WriteLine "Script executed" objTSOut.Close

    Ну и самое главное – сценарий который будет непосредственно запускать файл на удалённом компьютере, RunRemoteScript.vbs:

    Set objController = CreateObject("WshController") Set objRemoteScript = objController.CreateScript("C:\test.vbs", "computer1") WScript.ConnectObject objRemoteScript, "remote_" objRemoteScript.Execute Do While objRemoteScript.Status <> 1 WScript.Sleep 1000 Loop MsgBox "Script complete" Sub remote_Error Dim objError Set objError = objRemoteScript.Error WScript.Echo "Error - Line: " & objError.Line & _ ", Char: " & objError.Character & vbCrLf & _ "Description: " & objError.Description WScript.Quit -1 End Sub

    Во второй строчке задается имя запускаемого сценария, и имя компьютера.

    PS: Чтобы заставить работать этот сценарий я потратил немало времени, особенно пока нашел пункт 5 😉 И то, в результате у меня получилось выполнить сценарий лишь на машине с Windows XP (SP3). На компьютере с Vista ничего не получилось – возможно нужны какие то дополнительные пункты чтобы обойти новые усовершенствования безопасности 🙂 Так что если у вас вдруг возникли какие то проблемы с этой штукой – google вам в руки и удачи 😉

    Инструкция

    Запустите файл с расширением *.vbs двойным кликом мыши или вызовите его по имени в консоли. Для этого зайдите в меню пуск/выполнить и наберите путь к необходимому файлу в открывшемся окошке. Это самый обычный текстовый документ, который легко можно править в . Данный метод самый понятный и простой, но иногда в силу определенных обстоятельств он не срабатывает (система не поддерживает формат, слетела кодировка и т.д.).

    Если файл с расширением *.vbs , проверьте наличие интерпретаторов языка VBS. Их в системе должно быть два: консольный CScript и оконный WScript (вместе они – Windows Script Host или WSH). Они, по идее, должны сразу устанавливаться вместе с системой, но иногда так получается, что они либо повреждены, либо вообще не установлены (может быть на старых версиях систем). Если интерпретаторов нет в наличии, установите их на свой компьютер и запустите скрипт двойным щелчком мыши.

    Создайте обыкновенный текстовый файл с расширением txt. Скопируйте туда данный текст:Sub Run(ByVal sFile)Dim shellSet shell = CreateObject("WScript.Shell")shell.Run Chr(34) & sFile & Chr(34), 1, falseSet shell = NothingEnd SubRun "C:/Program Files/FileZilla FTP Client/filezilla.exe"Естественно, путь заменяете своим исполняемым файлом. Затем переименуйте созданный ранее txt-файл на vbs расширение. Для проверки щелкните два раза по нему мышкой, и по указанному пути запустится программа.

    Для того чтобы обратиться к методу Windows Script Host, укажите объект и метод с нужными параметрами (через точку). Свойства WSH указываете также, но их можно и назначать и считывать в переменные и остальные свойства. Всегда учитывайте тип данных свойств и переменных, в противном случае сценарий будет выдавать ошибку о несовместимости типов данных.

    Написать или подобрать полезный веб-скрипт – это полдела, надо ещё найти способ его выполнить. Давайте рассмотрим подробнее, что нужно для исполнения наиболее распространённых типов скрипт ов.

    Инструкция

    Обязательным условием выполнения любого скрипт а (то есть сценария), естественно, является наличие самого исполнителя. Применительно к языкам -программирования таким исполнителем будет интерпретатор скрипт ового языка. В зависимости от того, где должен исполняться сценарий, интерпретатор языка может быть либо частью серверного программного обеспечения, либо частью программного кода браузера. Поэтому чтобы выполнить любой серверный скрипт (например, php- или perl-скрипт ) необходимо иметь запущенный сервер. Сервер можно подобрать в сети и у себя в . Очень популярен, к примеру, среди русскоязычных программистов из-за своей относительной простоты и бесплатности серверного программного обеспечения под названием «Денвер». А можно не морочиться с установкой у себя, а воспользоваться услугами хостинг-провайдера. Провайдер даст вам доступ к , а все заботы по его поддержанию и обслуживанию вас не будут касаться. Обычно такие платны, но не дороги.

    По- обстоит дело с «клиентскими» скрипт ами. Это сценарии, которые должны выполняться прямо в . Чтобы выполнить такой скрипт , написанный, например, на языке JavaScript кроме браузера да простого текстового редактора (подойдёт стандартный блокнот) ничего больше не требуется. Вот, к примеру, простейший скрипт : var now = new Date();
    document.write ("Этот скрипт выплнен в " + now.getHours() + " часов " + now.getMinutes() + " минут");Чтобы его выполнить, достаточно сохранить этот код в файле с расширением html (например, test.html) а затем запустить двойным щелчком мыши. Расширение html (HyperText Markup Language - «язык разметки гипертекста») в операционной системе зарезервировано за файлами, содержащими веб-страницы. Поэтому ОС запустит ваш браузер и передаст ему адрес этого файла, а браузер распознает скрипт , прочтёт и выполнит его сценарий. В результате мы увидим