Запуск скрипта vbs на удаленном компьютере

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

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

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

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

Сам запуск производится при помощи метода 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 позволяет передать фокус приложению. Ему передается заголовок окна приложения:

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

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

Читайте также:  Airport base station agent

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

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

Инструкция

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

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

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

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

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

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

Список параметров: / 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 " D: KmaniZoro PGM N ++ VBS inputbox.vbs "

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

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

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

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

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

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

Я разбиваю это на несколько отдельных частей, так как каждая часть может быть выполнена индивидуально. (Я вижу подобный ответ, но я расскажу здесь более подробное объяснение.)

Первая часть , чтобы избежать ввода "CScript" (или "WScript"), вам нужно сообщить Windows, как запустить файл *.vbs script. В моей Windows 8 (я не могу быть уверен, что все эти команды работают точно так, как показано здесь в старых Windows, но процесс тот же, даже если вам нужно немного изменить команды), запустите консольное окно (например, "командную строку", или aka [неправильно] "приглашение dos") и введите "assoc.vbs". Это должно привести к ответу, например:

C:WindowsSystem32>assoc .vbs .vbs=VBSFile

Используя это, вы затем набираете "ftype VBSFile", что должно приводить к ответу:

C:WindowsSystem32>ftype VBSFile vbsfile="%SystemRoot%System32WScript.exe" "%1" %*

C:WindowsSystem32>ftype VBSFile vbsfile="%SystemRoot%System32CScript.exe" "%1" %*

Если эти два уже определены, как указано выше, ваша Windows уже настроена, чтобы знать, как запустить файл *.vbs. (BTW, WScript и CScript — это одна и та же программа с использованием разных имен. WScript запускает script, как если бы это была программа GUI, а CScript запускает ее, как если бы она была программой командной строки. См. Другие сайты и/или документацию для эти детали и предостережения.)

Если какая-либо из команд не ответила так, как указано выше (или аналогичные ответы, если тип файла, сообщаемый ассоциацией и/или командой, выполненной с сообщением ftype, имеет разные имена или местоположения), вы можете ввести их сами:

Читайте также:  Dig or die карта

C:WindowsSystem32>ftype vbsfile="%SystemRoot%System32WScript.exe" "%1" %*

Вы также можете ввести "help assoc" или "help ftype" для получения дополнительной информации об этих командах, которые часто удобны, когда вы хотите автоматически запускать определенные программы, просто набрав имя файла с определенным расширением. (Будьте осторожны, поскольку некоторые расширения файлов специально настроены Windows или программами, которые вы, возможно, установили, чтобы они работали правильно. Всегда проверяйте текущие присвоенные значения, сообщаемые assoc/ftype, и сохраняйте их в текстовом файле где-нибудь, если вам нужно восстановить их.)

Вторая часть , не вводя расширение файла при вводе команды из окна консоли. Понимание того, как Windows (и программа CMD.EXE) находит команды, которые вы вводите, полезна для этого (и следующий) часть. Когда вы вводите команду, давайте использовать "querty" в качестве примера, система сначала попытается найти в ней команду внутреннего списка команд (через настройки в реестре Windows для самой системы или запрограммированные в случае CMD.EXE). Поскольку такой команды нет, она попытается найти команду в текущей переменной среды% PATH%. В старых версиях DOS/Windows CMD.EXE(и/или COMMAND.COM) автоматически добавит расширения файлов ".bat", ".exe", ".com" и, возможно, ".cmd" к имени команды, которое вы напечатано, если вы явно не набрали расширение (например, "querty.bat", чтобы избежать ошибки "querty.exe" по ошибке). В более современных Windows он попробует расширения, перечисленные в переменной среды% PATHEXT%. Итак, все, что вам нужно сделать, это добавить.vbs в% PATHEXT%. Например, здесь мой% PATHEXT%:

C:WindowsSystem32>set pathext PATHEXT=.PLX;.PLW;.PL;.BAT;.CMD;.VBS;.COM;.EXE;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY

Обратите внимание, что расширения ДОЛЖНЫ включать ".", разделяются символом ";" и что.VBS отображается в поле "ПОСЛЕ.CMD", но ДО.COM. Это означает, что если командный процессор (CMD.EXE) находит более одного совпадения, он будет использовать первый из перечисленных. То есть, если у меня есть query.cmd, querty.vbs и querty.com, он будет использовать querty.cmd.

Теперь, если вы хотите сделать это все время без необходимости устанавливать% PATHEXT%, вам придется изменить системную среду. Ввод его в окне консоли только изменяет его для сеанса окна консоли. Я оставлю этот процесс упражнением для читателя.:-P

Третья часть , чтобы запустить script, не набирая полный путь. Эта часть, относящаяся ко второй части, существует со времен DOS. Просто убедитесь, что файл находится в одном из каталогов (папки, для вас, люди Windows!), Перечисленные в переменной среды% PATH%. Мое предложение состоит в том, чтобы сделать ваш собственный каталог для хранения различных файлов и программ, которые вы создаете или часто используете из окна консоли/командной строки (то есть не беспокойтесь об этом для программ, которые вы запускаете из стартовое меню или любой другой метод.. только консольное окно. Не связывайтесь с программами, которые установлены Windows или автоматическим установщиком, если вы не знаете, что делаете).

Лично я всегда создаю каталог "C:sysat" для пакетных файлов, каталог "C:sysin" для файлов *.exe и *.com(например, если вы загружаете что-то вроде "md5sum", утилита контрольной суммы MD5), каталог "C:syswsh" для VBScripts (и JScripts с именем "wsh", поскольку оба выполняются с помощью "Windows Scripting Host" или "wsh"), и скоро. Затем я добавляю их в свою переменную% PATH% (панель управления → расширенные параметры системы → вкладка "Дополнительно" → "переменные среды"), поэтому Windows всегда может найти их при вводе их.

Объединение всех трех частей приведет к настройке вашей системы Windows, чтобы везде, где вы можете ввести команду командной строки, вы можете запустить свой VBScript, просто набрав его имя базового файла. Вы можете сделать то же самое для любого типа файла/расширения; Как вы, вероятно, видели в моем% PATHEXT%, моя система настроена на запуск сценариев Perl (.PLX;.PLW;.PL) и Python (.PY). (Я также поставил "C:sysat; C:sysscripts; C:syswsh; C:sysin" в начале моего% PATH% и поместил различные командные файлы, script файлы и т.д. в этих каталогах, поэтому Windows всегда может их найти. Это также удобно, если вы хотите "переопределить" некоторые команды: сначала поместить файлы *.bat в путь, чтобы система находила их перед *. exe, например, и тогда файл *.bat может запустить реальную программу, предоставив полный путь к фактическому файлу *.exe. Узнайте о различных сайтах в "программировании пакетных файлов" для получения подробной информации и других примеров мощности командной строки.. Это еще не мертво!)

Последнее замечание: . Проверьте некоторые из других сайтов для различных предупреждений и предостережений. Этот вопрос поставил script с именем "converter.vbs", который опасно близок к команде "convert.exe", которая представляет собой программу Windows для преобразования вашего жесткого диска из файловой системы FAT в файловую систему NTFS. которые могут сжать ваш жесткий диск, если вы допустили ошибку ввода текста.

Читайте также:  Placeholder что это такое

С другой стороны, используя вышеупомянутые методы, вы также можете изолировать себя от таких ошибок. В качестве примера можно использовать CONVERT.EXE. Переименуйте его в нечто вроде "REAL_CONVERT.EXE", затем создайте файл типа "C:sysatconvert.bat", который содержит:

@ECHO OFF ECHO !DANGER! !DANGER! !DANGER! !DANGER, WILL ROBINSON! ECHO This command will convert your hard drive to NTFS! DO YOU REALLY WANT TO DO THIS?! ECHO PRESS CONTROL-C TO ABORT, otherwise.. REM "PAUSE" will pause the batch file with the message "Press any key to continue. ", REM and also allow the user to press CONTROL-C which will prompt the user to abort or REM continue running the batch file. PAUSE ECHO Okay, if you"re really determined to do this, type this command: ECHO. %SystemRoot%SYSTEM32REAL_CONVERT.EXE ECHO to run the real CONVERT.EXE program. Have a nice day!

Вы также можете использовать CHOICE.EXE в современных Windows, чтобы пользователь вводил "y" или "n", если они действительно хотят продолжить, и т.д. Опять же, мощь пакетных (и скриптовых) файлов!

Большинство этих сайтов ориентированы на пакетные файлы, но большая часть информации в них применяется для запуска любого типа файлов (*.bat), файла команды (*.cmd) и сценариев (*.vbs, *.js, *.pl, *.py и т.д.).

Поиск

Календарь постов

Январь 2009
Пн Вт Ср Чт Пт Сб Вс
« Дек Фев »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Категории

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

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

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

  1. Права администратора на удалённом компьютере. Ну это само собой разумеется, и требуется почти во всех методах запуска которые я перечислял в блоге.
  2. Разрешить WSH Remote Scripting создав строковой параметр Remote равный “1” в ключе реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows Script HostSettings
  3. Из за бага 311269, на системах с Windows XP необходимо выполнить команду wscript –regserver. В SP3 ошибка вроде как исправлена.
  4. Необходимо отключить Firewall (или разрешить обращения к DCOM в исключениях) на обоих компьютерах. Да, да, и на том с которого запускаете сценарий, тоже (спасибо Косте Леоньтеву, я бы не догадался 🙂 )
  5. В системах XP SP2 и выше необходимо изменить параметры безопасности (это можно сделать с помощью групповой политики). В узле Computer ConfigurationWindows SettingsSecurity SettingsLocal PoliciesSecurity 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: est.vbs (он будет запущен на удалённом компьютере):

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

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

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

alex_diablo

Активный пользователь

Добрый день. есть 2 проблемы:

как запустить/скопировать через psexec на удаленную машину с сетевой шары скрипт.vbs?

psexec -i -s -h -d \domain-pc -c -f \fileseverscript.vbs не срабатывает.
выдает: PsExec could not start scrirt.vbs on domain-pc:

но при этом сам файл копируется в system32.

и второе: пробую запустить:

psexec -i -s -h -d \domain-pc script.vbs также выдает:

PsExec could not start scrirt.vbs on domain-pc:

если делать так:

psexec -d \domain-pc -c -f \fileseverscript.vbs
psexec -s -h -i -d \domain-pc -c -f \fileseverstart.bat

то скрипт запускается, но при этом мелькает окошко CMD. можно ли как-то по другому организовать запуск vbs скрипта на удаленной машине без этих костылей (без доп. батника) и если нет — можно ли сделать так, чтобы не мелькало черное окошко перед запуском скрипта?

Оцените статью
Добавить комментарий

Adblock
detector