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

Создал обширную программу пакетного сценария для обработки некоторого автоматизированного управления файлами и печати, и мне нужно вызвать файл vbs для его операции sendkeys. Есть ли способ сделать это без замораживания программы?

Я пробовал START / WAIT my.vbs, и скрипт зависает, когда он входит в.vbs

У кого-нибудь есть другие методы или переключатели, которые вы бы порекомендовали?

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

таймаут 5 таймаут /?

TIMEOUT

Описание: Эта утилита принимает параметр тайм-аута для ожидания указанного периода времени (в секундах) или до нажатия любой клавиши. Он также принимает параметр для игнорирования нажатия клавиши.

Список параметров: / T timeout Указывает количество секунд ожидания. Допустимый диапазон: от -1 до 99999 секунд.

/ NOBREAK Ignore key presses and wait specified time . /? Displays this help message .

ПРИМЕЧАНИЕ. Значение тайм-аута -1 означает бесконечное ожидание нажатия клавиши.

TIMEOUT /? TIMEOUT / T 10 TIMEOUT / T 300 / NOBREAK TIMEOUT / T - 1

Просто позвоните Правильный путь файла vbs

Файл BAT Edit it ... !!!

wscript " file-path "

Пример:

wscript " D: \ KmaniZoro \ PGM \ N ++ \ VBS \ inputbox.vbs "

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

Области применения

Код VBScript не нуждается в процедурных областях: он может быть записан как скрипт , который просто выполняет кучу процедурных операций сверху вниз.

В исполняемых операциях VB6 / VBA могут существовать только внутренние области процедур.

Типы

В VBScript все (переменные, возвращаемые значения функции и т. Д.) - это Variant (т. Е. Почти утка , как в JavaScript). При объявлении переменной запрещено объявлять явный тип. Ключевое слово As запрещено!

В VB6 / VBA все по умолчанию используется неявным Variant , но хороший код VB6 / VBA использует явные типы, где это применимо.

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. Их в системе должно быть два: консольный 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 - «язык разметки гипертекста») в операционной системе зарезервировано за файлами, содержащими веб-страницы. Поэтому ОС запустит ваш браузер и передаст ему адрес этого файла, а браузер распознает скрипт , прочтёт и выполнит его сценарий. В результате мы увидим

Да, как ни странно у 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 вам в руки и удачи 😉