Запуск vbs из vbs: Как запустить VBScript из командной строки cscript или WScript

Как запустить VBScript из командной строки cscript или WScript

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

Во-первых , чтобы избежать ввода «CScript» (или «WScript»), вам нужно рассказать Windows, как запустить файл скрипта * .vbs. В моем Windows 8 (я не могу быть уверен, что все эти команды работают точно так же, как показано здесь в более старом Windows, но процесс тот же, даже если вам придется немного изменить команды), запустите окно консоли (он же «командная строка» или он же [неправильно] «DOS prompt») и введите » assoc .vbs «. Это должно привести к такому ответу, как:

C:\Windows\System32>assoc .vbs
.vbs=VBSFile

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

C:\Windows\System32>ftype VBSFile
vbsfile="%SystemRoot%\System32\WScript.exe" "%1" %*

-OR-

C:\Windows\System32>ftype VBSFile
vbsfile="%SystemRoot%\System32\CScript.exe" "%1" %*

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

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

C:\Windows\System32>assoc .vbs=VBSFile

-and/or-

C:\Windows\System32>ftype vbsfile="%SystemRoot%\System32\WScript.exe" "%1" %*

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

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

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

Обратите внимание, что расширения MUST включают в себя».», разделены»;», и что .VBS указан AFTER .CMD, но BEFORE .COM. Это означает, что если командный процессор (CMD.EXE) найдет более одного совпадения, он будет использовать первое из перечисленных. То есть, если у меня есть query.cmd, querty.vbs и querty.com, он будет использовать querty.cmd.

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

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

Лично я всегда создаю каталог» C:\sys\bat «для пакетных файлов, каталог» C:\sys\bin «для файлов * .exe и * .com (например, если вы загружаете что-то вроде «md5sum», утилита контрольной суммы MD5), каталог» C:\sys\wsh «для VBScripts (и JScripts, названный «wsh», потому что оба они выполняются с помощью» Windows Scripting Host » или программы «wsh») и так далее. Затем я добавляю их в свою системную переменную %PATH% (Панель управления -> дополнительные настройки системы — > вкладка Дополнительно — > кнопка Переменные среды), поэтому Windows всегда может найти их, когда я их набираю.

Объединение всех трех частей приведет к настройке вашей системы Windows таким образом, что в любом месте, где вы можете ввести команду командной строки, вы можете запустить свой VBScript, просто введя его базовое имя файла. Вы можете сделать то же самое практически для любого файла type/extension;, как вы, вероятно, видели в моем выводе %PATHEXT%, моя система настроена на запуск сценариев Perl (.PLX;.PLW;.PL) и Python (.PY). (Я также ставлю «C:\sys\bat; C:\sys\scripts;C:\sys\wsh; C:\sys\bin» перед моим %PATH%, и помещаю различные пакетные файлы, файлы сценариев и т. д. В эти каталоги, чтобы Windows всегда мог их найти. Это также удобно, если вы хотите «override» некоторые команды: помещая файлы * .bat сначала в путь, система находит их, например, до файлов * .exe, а затем файл * .bat может запустить фактическую программу, указав полный путь к фактическому файлу *. exe. Проверьте различные сайты на «batch file programming» для получения подробной информации и других примеров мощности командной строки.. Он еще не умер!)

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

С другой стороны, используя вышеприведенные приемы, вы тоже можете оградить себя от подобных ошибок. Используя CONVERT.EXE в качестве примера.. Переименуйте его во что-то вроде «REAL_CONVERT.EXE», а затем создайте файл типа «C:\sys\bat\convert.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%\SYSTEM32\REAL_CONVERT.EXE
ECHO to run the real CONVERT.EXE program. Have a nice day!

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

Вот несколько ссылок на некоторые хорошие ресурсы о том, как использовать всю эту силу:

http://ss64.com/

http://www.computerhope.com/batch.htm

http://commandwindows.com/batch.htm

http://www.robvanderwoude.com/batchfiles.php

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

Как запустить EXE в VBScript — Вокруг-Дом

VBScript, подмножество Visual Basic, является бесплатным языком программирования, который любой может использовать для создания полезных приложений Windows. Добавив всего несколько операторов в текстовый файл «.vbs», вы можете записывать в текстовые файлы и даже запускать программы EXE с помощью команды «Выполнить». Эта команда полезна, когда вы хотите создать ярлыки для часто используемых программ. Разработчики могут также использовать команду «Выполнить» внутри более сложных приложений VBScript для запуска внешних программ EXE по мере необходимости.





Шаг 1

Откройте Блокнот и вставьте следующий код в новый документ:

Установите WshShell = WScript.CreateObject («WScript.Shell»)

Dim exeName Dim statusCode

exeName = «% windir% notepad»

statusCode = WshShell.Run (exeName, 1, true)

MsgBox («Конец программы»)

Этот код VBScript создает объект «Shell» в строке 1. Обратите внимание на значение «exeName». Эта переменная содержит имя EXE-файла, который вы хотите запустить. Это имя — путь к блокноту в этом примере. Если вы хотите запустить программу EXE с именем «MusicLab.exe», расположенную на вашем диске «C», вы должны сделать следующее утверждение:





exeName = «C: MusicLab.exe»

Оставьте значение exeName без изменений на данный момент. Следующий оператор выполняет команду «Выполнить». Команда «Выполнить» запускает EXE, указанный в переменной «exeName». Второй параметр «1» в команде «Выполнить» сообщает VBScript, как вы хотели бы, чтобы окно EXE отображалось при его открытии. Значение «1» заставляет VBScript отображать обычное окно. Последнее значение в команде «Выполнить», «true», заставляет программу VBScript приостанавливаться до тех пор, пока исполняемый файл EXE не закроется. Последний оператор отображает окно с сообщением, которое сообщает, что VBScript завершен.





Шаг 2

Нажмите кнопку «Файл» в блокноте, а затем нажмите «Сохранить как». Откроется окно Сохранить как. Это окно позволяет вам сохранить вашу программу VBScript.

Шаг 3

Введите имя для программы, например «MyScript», в текстовое поле «Имя файла». Добавьте «.vbs» в конец этого имени. Например, если вы выбрали «MyScript» в качестве имени файла, введите «MyScript.vbs» (без кавычек) в текстовое поле имени файла и нажмите «Сохранить». Это сохраняет файл как файл VBScript.

Шаг 4

Откройте проводник Windows и найдите файл. Дважды щелкните файл. Запускается и новый экземпляр Блокнота. Программа VBScript приостанавливается после открытия Блокнота, потому что вы передали «1» команде «Выполнить». Если вместо этого вы передали 0, сценарий VBScript не будет приостановлен.





Шаг 5

Закройте Блокнот. Программа возобновляет выполнение и отображает окно с сообщением «Конец программы».

Как запустить VBScript в режиме x86 \ Как запустить консоль в режиме x86 — Pyatnitsev Home

Возникла достаточно интересная проблема.

Есть старый VBScript’ик, который соединяется с базой данных и забирает оттуда данные. Делает он это через драйвер, который ставится вместе с BDE.

Проблема… Нужно перенести этот скрипт из Windows Server 2003 на Windows Server 2012 R2. При попытке прямого запуска получаем ошибку — невозможно соединиться с базой. Более того, он даже не может создать объект.

Как решить это?

Драйвер, который используется для подключения к базе данных написан под x86 (WIN32) и не виден, и не работает под Windows x64, а Windows Server 2012R2 собственно и выпускается только под X64, редакции под x86 нет и не будет.

Я перепробовал несколько способов. Кое-что работает, но не совсем так как нужно. Как вариант запустить 32-х битную версию ODBC и там создать DSN, тогда да…. Работать будет, но опять же у меня возникла проблема при обращении из MSMS.

Можно заставить сам скрипт работать в режиме x86, для этого есть 2 пути

Запуск 32-битной версии CMD (Консоли)

Можно запустить 32-х битную версию консоли, а потом выполнить в ней скрипт. 32-х битная версия находится тут:

%windir%\SysWoW64\cmd.exe

%windir%\SysWoW64\cmd.exe

И уже в ней выполнить скрипт, просто прописав путь до него в консоль.

Запуск Windows Script Host в режиме x86

Можно попросить систему выполнить скрипт в режиме x86 запустив самого исполнителя в этом режиме.

Windows Script Host x86 находится тут:

C:\windows\syswow64\wscript.exe

C:\windows\syswow64\wscript.exe

Таким образом скрипт можно выполнить так:

  1. Открываем обычный CMD (пуск -> Выполнить -> CMD.exe)
  2. Прописываем туда C:\windows\syswow64\wscript.exe <Путь до скрипта>
  3. Оно выполняется

На самом деле это бывает очень важно, когда нужно создать «ярлычок» пользователю что бы он его запускал.

Что бы сделать такой ярлычок нужно:

  1. Создать *.bat файл
  2. В нем прописать C:\windows\syswow64\wscript.exe <Путь до скрипта>
  3. Можно запустить. Тогда оно покажет окно командной строки и будет исполнять скрипт.

Запуск сценариев (wscript.exe и cscript.exe) — Информатика, информационные технологии

Лабораторная работа №5.

Сервер сценариев Windows Scripting Host. Методы объектов WscriptShell и WshNetwork

Цель: Овладеть навыками работы сервером сценариев ОС Windows, изучить возможности сервера сценариев, режимы выполнения сценариев и методы объекта WscriptShell иWshNetwork.

Общие положения

Долгое время для выполнения однотипных задач в среде Windows и DOS служили командные (пакетные) BAT-файлы. Основным их недостатком были примитивный DOS-интерфейс – отсутствие интерактивности, и довольно ограниченные возможности по работе с WINDOWS (трудность работы в сети, с ярлыками, с реестром и т.д.).

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

Раньше языки VBScript и JScript по своим возможностям были очень близки к Visual Basic for Applications — они также могли быть вызваны только из MS Internet Explorer и нескольких других программ Microsoft, которые их поддерживали.

С появлением Windows Scripting Host появилась возможность создавать для них отдельные сценарии, которые можно запускать и без Internet Explorer.

Также преимуществом Windows Scripting Host является то, что для запуска сценариев требуется мало памяти и то, что файлы сценариев могут быть практически любого размера (содержать десятки тысяч строк).

Еще одним преимуществом Windows Scripting Host является отсутствие среды разработки — не нужны компиляторы, редактирование сценариев может производиться в любом текстовом редакторе, способном работать с текстовыми файлами.

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

— вывод сообщений на экран;

— запуск других программ;

— работать с сетевыми дисками;

— устанавливать принтеры;

— работать с переменными среды;

— работать с реестром.

В Windows 2000 и последующих версиях Windows Scripting Host установлен по умолчанию. Отключить его использование можно только удалением ассоциаций с его файлами. Установленный Windows Script Host поддерживает несколько видов файлов: vbs, vbe, js, jse, wsf, wsc и wsh. Все они (кроме vbe и jse) являются простыми текстовыми файлами и могут редактироваться в любом текстовом редакторе.

Файлы .vbs и .js являются файлами, написанными на языке сценариев MS Visual Basic Script и MS JScript соответственно.

Файлы vbe и jse– это vbs и js-файлы зашифрованные с помощью программы MS Script Encoder.

Файлы с расширением .wsf – это файлы, содержащие XML-разметку для работы с WSH.

Файлы wsc — Windows Script Components (WSC) позволяют упаковывать сценарии для использования их в качестве СОМ-компонентов. По сути, это те же wsf-файлы, еще и содержащие COM-компоненты.

Файлы wsh являются файлами настроек Сервера Сценариев.

Запуск сценариев (WScript.exe и CScript.exe)

Для запуска сценариев, в составе Windows Scripting Host служат файлы WScript.exe (диалоговый режим) и CScript.exe (режим командной строки). Они находятся в каталоге C:\WINDOWS\system32\.

WScript.exe служит для запуска сценариев из Windows. Используя его, вы можете запускать сценарии подобно обычным приложениям Windows. Вот несколько способов:

1. Запускать сценарий, как обычное приложение двойным щелчком мыши, выделить и нажать Enter и т.д.

2. Ввести имя файла сценария и путь к нему в окне в окне “Выполнить” (RUN) меню “Пуск” (Start).

3. Ввести в строку окна “Выполнить” WScript.exe и имя файла сценария (с указанием пути к нему). При этом вы можете использовать параметры запуска WScript.exe.

CScript.exe — это версия Windows Scripting Host, которая используется для запуска сценариев из командной строки.

Синтаксис:

CScript [параметры] имя_файла.расширение [аргументы]

Для запуска сценариев, как с помощью CScript.exe так и с WScript.exe, можно использовать следующие параметры командной строки:

Параметр Версия WSH Описание
//B 1.0 Пакетный режим (подавляется вывод информации, запросов и сообщений об ошибках)
//D 2.0 Включить активную отладку
//E:язык 2.0 Указать язык сценария для исполнения файла
//H:CScript 1.0 Заменить исполняемый сервер сценариев на CScript.exe
//H:WScript 1.0 Заменить исполняемый сервер сценариев на WScript.exe
//I 1.0 Диалоговый режим (противоположный //B) (по умолчанию)
//Job:xxxx 2.0 Выполнить задание xxxx WSF-файла
//Logo 1.0 Отображать заставку (по умолчанию)
//Nologo 1.0 Не выводить заставку
//S 1.0 Запомнить параметры текущей командной строки для данного пользователя
//T:nn 1.0 Задать время исполнения сценария в секундах
//X 2.0 Выполнить сценарий под отладчиком
//U 2.0 Применять кодировку Unicode для перенаправленного консольного ввода-вывода

Например:

Cscript //T:10 Пример1.vbs

Отвести на выполнение сценария Пример1.vbs 10 секунд времени.

Попробуем сделать используемым сервером сценариев по умолчанию CScript.exe.

Для этого введем в командной строке:

wscript //h:cscript

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

Попробуем снова запустить сценарий VBScript Пример1.vbs.

Прочитать надпись практически невозможно, поскольку окно быстро “промелькнет” на экране.

Чтобы снова сделать сервером по умолчанию WScript.exe, введем в командную строку:

wscript //h:wscript

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

Какой способ лучше, нельзя сказать однозначно. У каждого есть свои плюсы и минусы. В пользу WScript.exe говорит его интерактивность. В пользу CScript.exe – незаметность для пользователя. Хотя для незаметности лучше всего включить пакетный режим с параметром //b.

Статьи к прочтению:

Introduction to scripting for systems administrators — Windows Scripting Host, part 1

Похожие статьи:
  • Запуск программ и документов

    Запускать программы на выполнение или документы на обработку можно следующими способами: — двойным щелчком (или одинарным щелчком, если в Windows 98 Вы…

  • Запуск прикладных программ

    Стандартный способ запуска любой программы состоит из ряда шагов: поиск названия программы (ярлыка программы) в Главном меню и щелчок левой клавишей мыши…

Еще один вариант запуска программ | Windows IT Pro/RE

С учетом ряда ограничений, для запуска программ на локальных и удаленных компьютерах можно использовать и возможности интерфейса Windows Management Instrumentation (WMI). Преимущества и недостатки данного подхода перечислены в Таблице 1. В настоящей публикации будет представлен сценарий, в котором запуск программ на локальных либо удаленных компьютерах реализуется через интерфейс WMI. В качестве дополнительных возможностей этого сценария можно отметить ожидание завершения программы и отображение времени ее выполнения.

Команда для запуска сценария RunProgram.vbs

Сценарий RunProgram.vbs использует для удаленного или локального запуска программ объекты WMI Win32_ProcessStartup и Win32_Process. Сценарий может работать на компьютерах с Windows 2000 с установленным на них компонентом Windows Script Host (WSH) 5.6, а также на компьютерах с Windows XP и последующих версий (начиная с Windows XP, компонент WSH 5.6 входит в состав операционной системы). Синтаксис команды запуска выглядит следующим образом:

RunProgram.vbs «command»
[/startin:path]
[/window:n]
[/computer:computer
[/username:username]
[/password:password]]
[/wait [/elapsed]]

В параметре command указывается командная строка, предназначенная для запуска. Не забывайте заключать ее в двойные кавычки («»). Команда запуска должна начинаться с имени исполняемого файла, поэтому если вы хотите запустить одну из внутренних команд cmd.exe (скажем, Dir или Copy) или какой-либо сценарий командной строки для оболочки cmd.exe, то в этом случае команда запуска должна начинаться с cmd /c. Если же нужно запустить сценарий WSH, то команда запуска должна начинаться с имени сервера сценариев cscript или wscript.

С помощью параметра /startin:path можно указать путь к каталогу, в котором будет выполняться запускаемая программа. Если этот параметр не указан, программа запустится в том же каталоге, что и вызвавший ее процесс (обычно это каталог %SystemRoot%system32). Если в описании пути содержатся пробелы, его необходимо заключать в двойные кавычки («»).

Параметр /window:n используется для настройки начального состояния окна, в котором будет выполняться программа. Это цифровой параметр, которому присваиваются те же значения, что и параметру intWindowStyle метода Run объекта WshShell. Например, если задано значение /window:7, программа будет запускаться в свернутом окне. По умолчанию используется значение /window:1 (что соответствует стандартному отображению окна на экране). Список всех допустимых значений данного параметра можно найти по адресу http://msdn.microsoft.com/library/default.asp?url=/library/enus/script56/html/wsmthrun.asp. Из соображений безопасности программы, выполняемые на удаленных компьютерах с Windows 2000 Service Pack 3 (SP3) и последующих версий, всегда выполняются в скрытом окне.

В параметре /computer:computer указывается имя удаленного компьютера, на котором должна выполниться запускаемая программа. Если этот параметр не задан, команда будет выполняться на локальном компьютере. С помощью ключей /user:username и /password:password можно задавать альтернативные параметры учетной записи для подключения к удаленной системе. Если эти параметры не заданы, сценарий RunProgram.vbs будет использовать текущую учетную запись, под которой вы зарегистрировались в системе. Для указания обоих параметров учетной записи необходимо, чтобы был задан ключ /computer, поскольку WMI не позволяет указывать параметры учетной записи для локального подключения. Здесь необходимо учитывать, что при использовании аргументов, задающих параметры учетной записи, и имя пользователя, и его пароль будут отображаться в командной строке в явном виде, поэтому данную возможность следует использовать аккуратно.

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

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

При запуске программы через RunProgram.vbs на экране отображается некоторая начальная информация: имя компьютера, на котором была запущена команда, выполняемая командная строка, каталог запуска программы (если он был задан) и идентификатор процесса (process ID), соответствующего запущенной программе (уникальный номер, который присвоен данному процессу). Типовой формат выходных данных сценария показан на Рисунке 1. В том случае, если указаны параметры /wait и /elapsed, по окончании выполнения программы на экране будут отображены данные о моменте ее запуска и завершения, а также время выполнения.

Процедура Main

В начале сценария объявляются две константы: SCRIPT_NAME, используемая процедурой ShowUsage, и PROCESS_CHECK_INTERVAL, которая используется в тех случаях, когда сценарий ожидает завершения выполнения программы. Затем запускается процедура Main, текст которой приведен в Листинге 1.

В начале этой процедуры объявляются необходимые переменные, после чего с помощью переменной Args формируется ссылка на объект WScript.Arguments. Если коллекция Unnamed пуста (т.е. ее свойство Count равно 0), либо в строке запуска был выбран ключ /?, вызывается процедура ShowUsage, которая выводит на экран краткое сообщение о корректном синтаксисе вызова сценария и завершает его выполнение.

Затем процедура Main считывает первый неименованный аргумент командной строки (т.е. первый аргумент, который не начинается с символа прямого слеша (/)) и вызывает функцию VBScript Unescape, которая заменяет последовательности символов %xx на их эквиваленты в коде ASCII (см. Листинг 1, фрагмент с меткой A). Функция Unescape предоставляет механизм внедрения символов двойных кавычек в строку, заключенную в кавычки. Более подробно это обсуждается во врезке «Добавление двойных кавычек в строку команды».

Далее процедура Main считывает данные о каталоге запуска (/startin), состоянии окна (/window) имени пользователя (/username) и его пароле (/password) и сохраняет эти сведения в соответствующих переменных. Для этого процедура обращается к коллекции WScript.Arguments.Named, содержащей те аргументы командной строки, которые начинаются с символа прямого слеша (/). Если в командной строке такой аргумент не задан, то при обращении к содержимому будет возвращено специальное значение Empty. В VBScript при сравнении Empty с пустой строкой («») возвращается значение True, поэтому сравнение значения аргумента параметра командной строки с пустой строкой является простым способом определения, имеет ли тот или иной ключ командной строки аргумент (например, ключ /startin:C: имеет аргумент C:, а ключ /startin не имеет аргумента).

После этого процедура Main проверяет, заданы ли в командной строке параметры /wait и /elapsed. Если они заданы, то в соответствующие переменные (Wait и Elapsed) записываются значения True.

После того как содержимое командной строки обработано, сценарий готов к подключению к компьютеру через WMI и запуску необходимой программы. Меткой B обозначен фрагмент кода, в котором для подключения к компьютеру и запуска программы создается новый экземпляр класса WMIExec. Для этого в процедуре используется не функция CreateObject, а ключевое слово New, поскольку определение класса WMIExec существует в том же файле сценария.

Подключение к компьютеру, имя которого было указано в командной строке (или к локальному, если ключ /computer не задан), осуществляется с помощью метода ConnectServer объекта WMIExec (имя указывается после названия используемого метода). Если метод возвращает ненулевой код завершения, процедура Main выводит сообщение об ошибке и завершает сценарий с кодом ошибки, возвращенным данным методом. Обычно эти коды ошибки начинаются с 0x8007 (что означает ошибку исполнения), а заканчиваются четырьмя шестнадцатеричными цифрами, являющимися ссылкой на соответствующую ошибку Win32. Чтобы интерпретировать ошибку, нужно преобразовать эти последние четыре цифры к десятичному виду, после чего запустить в командной строке команду Net Helpmsg, указав полученное десятичное значение в качестве параметра. Например, если был возвращен код ошибки 0x800706BA, то после преобразований получим 1722. Теперь, если запустить команду

Net Helpmsg 1722

то на экране отобразится сообщение The RPC server is unavailable (это говорит о том, что выбранный компьютер недоступен по сети).

Если метод ConnectServer выполнился успешно, то процедура Main продолжает выполнение. Если в командной строке был указан ключ /elapsed (т.е. если переменная Elapsed имеет значение True), то с помощью функции VBScript Now извлекается значение текущей даты и времени, которое записывается в переменную StartTime.

Затем Main вызывает метод RunProgram объекта WMIExec, с помощью которого осуществляется запуск программы. В случае успешного выполнения метод возвращает нулевое значение. В противном случае будет возвращено одно из значений, описанных в документе Microsoft «Create Method of the Win32_Process Class», который доступен по адресу http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/create_method_in_class_win32_process.asp,  после чего сценарий завершает свое выполнение. При успешном выполнении метода RunProgram сценарий выводит строку, возвращаемую методом Status объекта WMIExec.

Если в команде запуска сценария был задан ключ /wait, тогда последней задачей процедуры Main является приостановка выполнения сценария до тех пор, пока функция ProcessExists объекта WMIExec не возвратит значение True. Это реализуется с помощью цикла Do…Loop, внутри которого вызывается метод Sleep объекта WScript, приостанавливающий выполнение сценария на интервал времени (в миллисекундах), определяемый константой PROCESS_CHECK_INTERVAL, значение которой по умолчанию равно 500 (полсекунды). Если интервал слишком мал и это приводит к излишнему количеству используемых циклов ЦПУ, данное значение может быть увеличено.

Если в команде запуска сценария присутствует ключ /elapsed, то процедура Main с помощью повторного вызова функции VBScript Now извлекает значение текущей даты и времени, которое фиксируется в переменной EndTime. Далее формируется строка выходных данных с именем TimeInfo, которая содержит значения времени запуска (start time), времени завершения (end time) и времени выполнения программы (elapsed time). Чтобы получить значение времени выполнения, процедура вызывает функцию VBScript DateDiff, с помощью которой вычисляется разность (в секундах) между временем запуска и временем завершения. Это значение передается в качестве параметра функции GetElapsed, которая будет рассмотрена ниже.

Если сценарий был запущен через сервер Wscript, то окончательный результат его выполнения будет содержать как сведения о процессе, полученные с помощью метода Status объекта WMIExec, так и информацию о времени. Если сценарий запущен через CScript, то в выходных данных будет представлена только информация о времени. В этом случае сценарию не требуется выводить информацию о процессе, поскольку он уже находится в окне командной строки.

Класс WMIExec

Применяемая в данном сценарии функциональность WMI реализована в виде отдельного класса, поскольку данный класс использует набор из пяти переменных, которые должны совместно использоваться методами. Если бы сценарий был разработан без применения отдельного класса, это привело бы либо к необходимости использования глобальных переменных, либо к необходимости передачи большого количества параметров вспомогательным функциям. В результате сценарий получился бы довольно громоздким и сложным для чтения и эксплуатации. Чтобы избежать ошибок и конфликтов имен с другими переменными, используемых методами класса, в названии этих пяти переменных был введен префикс c_. Ранее уже было рассмотрено, как процедура Main вызывает четыре метода класса WMIExec, однако я хочу привести некоторые дополнительные сведения о том, как работают эти методы:

Метод ConnectServer. Данный метод создает объект WMI SWbemLocator, для чего используется функция VBScript CreateObject. При этом задается свойство Security_ данного объекта (как это было бы в случае объекта SWbemSecurity) путем присвоения его свойству ImpersonationLevel значения 3 (т.е., wbemImpersonationLevelImpersonate). Далее с помощью конструкции On Error Resume Next отключается встроенный обработчик ошибок VBScript. После этого вызывается метод ConnectServer объекта SWbemLocator. Значение, возвращаемое методом ConnectServer объекта WMIExec, соответствует значению свойства Number объекта Err, которое при успешном установлении соединения будет равно нулю. Если соединение установлено успешно, то переменная c_SWbemServices будет содержать ссылку на объект SWbemServices. При вызове метода ConnectServer объекта WMIExec используется объект SWbemLocator, а не моникер WMI (например, winmgmts: …), поскольку внутри строки моникера нет возможности задавать параметры учетной записи для установки соединения.

Метод RunProgram. Метод RunProgram использует объект SWbemServices, созданный при помощи метода ConnectServer объекта WMIExec, для создания объекта Win32_ProcessStartup и конфигурирует свойство ShowWindow объекта Win32_ProcessStartup. Далее, путем повторного обращения к объекту SWbemServices, он создает объект Win32_Process, использует его метод Create для запуска программы и завершает выполнение с результатом, возвращаемым методом Create.

Метод ProcessExists. С помощью этого метода определяется, существует ли данный процесс, для чего используется объект SWbemServices, созданный при помощи метода ConnectServer объекта WMIExec, а также идентификатор процесса process ID, созданный методом RunProgram. Для этого выполняется запрос к WMI для получения соответствующего process ID, считывается значение свойства Count коллекции, и если число, соответствующее количеству экземпляров, больше нуля, то возвращается значение True.

Метод Status. Метод Status использует переменные класса computer name (имя компьютера), command line (строка команды) и starting directory (каталог запуска) и возвращает строку в формате, показанном на Рисунке 1.

Функция GetElapsed

Имеющаяся в сценарии RunProgram.vbs функция GetElapsed служит для определения времени в часах. Для этого с помощью оператора целочисленного деления языка VBScript () количество секунд делится на 3600 (что соответствует количеству секунд в одном часе). Если результат больше нуля, функция вычитает количество часов. Далее оставшееся количество секунд делится на 60, чтобы получить количество минут, после чего количество минут также вычитается. Полученное значение времени представляется в виде строки n hour(s) (часы), n minute(s) (минуты), n second(s) (секунды).

Компонент WMI является мощным средством в арсенале сценариев для системного администрирования, и сценарий RunProgram.vbs демонстрирует еще один из возможных случаев применения данного инструмента. Возьмите на вооружение данный сценарий, и в вашем распоряжении появится еще один вариант запуска программ на удаленных компьютерах.


Рисунок 1. Формат вывода сценария

RunProgram.vbs Computer: или (LocalSystem)Command line: Starting directory: или (Default) Process ID:


Листинг 1. Сценарий RunProgram.vbs (процедура Main)

Sub Main()
Dim Args
Dim Command, StartIn, Computer, UserName, Password
Dim Wait, Elapsed
Dim ShowWindow, Result
Dim StartTime, EndTime
Dim Output, TimeInfo
Dim WMIRun

Set Args = WScript.Arguments

‘ Если не именованные аргументы не заданы или указан аргумент /?
‘ выводится справка о корректной строке запуска
If (Args.Unnamed.Count = 0) Or Args.Named.Exists(«?») Then _
ShowUsage

‘ BEGIN CALLOUT A
Command = Unescape(Args.Unnamed(0))
‘ END CALLOUT A

StartIn = Args.Named(«startin»)

ShowWindow = Args.Named(«window»)
If Not IsNumeric(ShowWindow) Then ShowUsage
If (ShowWindow < 0) Or (ShowWindow > 65535) Then ShowUsage

Computer = Args.Named(«computer»)
UserName = Args.Named(«username»)
Password = Args.Named(«password»)

Wait = Args.Named.Exists(«wait»)
Elapsed = Args.Named.Exists(«elapsed»)

‘ Создание экземпляра класса
‘ BEGIN CALLOUT B
Set WMIRun = New WMIExec
‘ END CALLOUT B

Result = WMIRun.ConnectServer(Computer, UserName, Password)
If Result <> 0 Then
WScript.Echo «Error 0x» & Hex(Result) & » connecting to ‘» _
& Computer & «‘»
WScript.Quit Result
End If

If Elapsed Then StartTime = Now()

Result = WMIRun.RunProgram(Command, StartIn, ShowWindow)
If Result <> 0 Then
WScript.Echo «Error 0x» & Hex(Result) & » starting ‘» _
& Command & «‘»
WScript.Quit Result
End If

‘ Вывод сообщения о начальном состоянии
WScript.Echo WMIRun.Status

If Wait Then
‘ Пока процесс запущен, выполнение сценария приостанавливается
Do While WMIRun.ProcessExists()
WScript.Sleep PROCESS_CHECK_INTERVAL
Loop
If Elapsed Then
EndTime = Now()
TimeInfo = «Started: » & CStr(StartTime) & vbNewLine _
& «Ended: » & CStr(EndTime) & vbNewLine _
& «Elapsed: » & GetElapsed(DateDiff(«s», StartTime, EndTime))
‘ Если сценарий запущен через wscript.exe,
‘ выводится полная информация о статусе
If ScriptHost() = «wscript.exe» Then
Output = WMIRun.Status & vbNewLine & TimeInfo
Else
Output = TimeInfo
End If
WScript.Echo Output
End If
End If
End Sub

Таблица 1. Преимущества и недостатки программных инструментов удаленного запуска программ

Средство

Преимущества

Недостатки

PsExec

Программа запускается в интерактивном режиме.

Может использовать текущие параметры учетной записи

Альтернативные параметры учетной записи передаются открытым текстом

В некоторых случаях использование утилит третьих фирм может быть запрещено

Планировщик заданий Task Scheduler

Безопасность

Если запускается не от имени системной учетной записи (LocalSystem), то требует задания параметров учетной записи

Сложно запускать программы в интерактивном режиме

WMI

Безопасность

Может использовать текущие параметры учетной записи

Удаленные программы не могут запускаться в интерактивном режиме.

Удаленные программы не имеют доступа к сети


Добавление двойных кавычек в строку команды

Исполнительный механизм Windows Script Host (WSH) считывает аргументы из командной строки запуска сценария и помещает их в объект WshArguments, обеспечивая таким образом доступ как к аргументам, так и к связанным с ними коллекциям. В качестве символа-разделителя аргументов обработчик командной строки использует двойные кавычки («), поэтому допускается использование аргументов, содержащих пробелы, заключенных в двойные кавычки. В тех случаях, когда сам аргумент содержит кавычки, это приводит к проблемам, поскольку сам обработчик не имеет встроенного механизма добавления символов кавычек («). Предположим, что мы хотим запустить сценарий RunProgram.vbs с помощью следующей команды запуска:

RunProgram.vbs
«C:Program FilesTest ProgramTest.exe
C:Program FilesTest.txt»

При этом метод Create класса WMI Win32_Process сможет успешно запустить программу (C:Program FilesTest ProgramTest.exe), однако параметр (C:Program FilesTest.txt) также содержит пробелы, а, следовательно, должен быть заключен в кавычки, чтобы программа Test.exe рассматривала его как один параметр. Для обработки данной ситуации в RunProgram.vbs задействована функция Unescape языка VBScript. Она берет строку, содержащую последовательность символов %xx (где xx — шестнадцатеричное представление соответствующего символа ASCII) и заменяет требуемый символ его ASCII-эквивалентом. Двойным кавычкам в ASCII соответствует значение 34 (т.е., 22 в шестнадцатеричном виде), поэтому вместо приведенной выше команды следует вводить строку:

RunProgram.vbs «%22C:Program FilesTest ProgramTest.exe%22
%22C:Program FilesTest.txt%22″

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

Поделитесь материалом с коллегами и друзьями

Запуск в Windows PowerShell внешних исполняемых файлов

В предыдущих статьях мы говорили о командлетах, функциях и сценариях в Windows PowerShell. Сегодня поговорим о последнем типе команд — внешних исполняемых файлах. Речь идет о командных файлах классической командной строки Windows (cmd.exe) и сценариях на языке VBScript.

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

Windows PowerShell позволяет запускать файлы .bat и .cmd. Для запуска необходимо указать путь к файлу. Например

C:\primer.bat

При этом PowerShell создаст процесс cmd.exe, который и выполнит этот запрос. Тоже самое относится и к файлам .vbs. Windows PowerShell позволяет не только запускать подобные файлы, но и внедрять код VBScript в сценарии PowerShell. Если смотреть шире, то, на самом деле, внедрять можно код любого языка, поддерживающего ActiveX Scripting. При этом правда стоит учитывать, что эти языки весьма сильно отличаются по синтаксису от языка PowerShell.

Если же Вы хотите запустить в Windows PowerShell команду классической командной строки, то для этого достаточно использовать cmd /c.

Например, команда

cmd /c dir /b

выдаст Вам список файлов текущего каталога в виде одних только имен, без дополнительных атрибутов. Это команда cmd.exe, которую мы запустили в консоли PowerShell.

Microsoft постаралась сделать синтаксисы классической командной строки и Windows PowerShell максимально схожими. Поэтому многие знакомые нам команды работают и в PowerShell без дополнительных манипуляций. Полной совместимости достичь, однако, было невозможно из-за разного принципа реализации работы cmd.exe и PowerShell. В PowerShell были введены командлеты, объединяемые в конвейеры. В классической командной строке Windows был список команд, которые очень гибко настраивались большим количеством дополнительных параметров.

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

Как добавить в контекстное меню Проводника команду для запуска VBS-файлов

Не так уже и часто приходится выполнять твики с применением скриптов VBS, но если такая необходимость всё же возникает, обычно это всегда требует от пользователя дополнительных действий. Так, если командный файл CMD можно запустить обычным двойным кликом, то скрипт VBS необходимо запускать через открытую от имени администратора командную строку, предварительно указав в ней полный к нему путь. На это уходит какая-то минута или максимум две, но есть и более простой путь.

Как насчёт того, чтобы запускать скрипты VBS из контекстного меню Проводника? По умолчанию такая опция в нём отсутствует, но её можно в него добавить, подкорректировав один ключ системного реестра. И вот как это можно сделать. Командой regedit откройте редактор реестра и разверните следующую ветку:

HKEY_CLASSES_ROOT/VBSFile/shell

Создайте в последнем разделе новый подраздел и назовите его runas.

А нём создайте обычный строковый параметр с именем HasLUAShield и оставьте его пустым.

Он нужен только для того, чтобы в контекстном меню появился значок UAC. Теперь создайте в подразделе runas ещё один подраздел на этот раз с именем с command, так что конечный путь у вас должен будет выглядеть следующим образом:

HKEY_CLASSES_ROOT/VBSFile/shell/Runas/command

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

C:/Windows/System32/WScript.exe «%1» %*

Закройте редактор реестра и попробуйте вызвать для какого-нибудь VBS-файла контекстное меню. Если вы нигде не ошиблись при редактровании ключа, в меню у вас появится новая опция «Запуск от имени администратора», слева от которой будет располагаться значок UAC.

Эта опция и будет служить для быстрого запуска скриптов VBS в обход командной строки. Для удаления команды из меню удалите из реестра подраздел runas со всем его содержимым.

Запустить vbscript из другого vbscript

Вы можете попробовать использовать метод Wshshell.Run, который дает вам небольшой контроль над процессом, который вы запускаете с его помощью. Или вы можете использовать метод WshShell.Exec, который даст вам возможность завершить его, получить ответ, передать больше параметров (кроме аргументов командной строки), получить статус и другие

Для использования Run (простой метод)

  Dim ProgramPath, WshShell, ProgramArgs, WaitOnReturn, intWindowStyle
Установите WshShell = CreateObject ("WScript.Оболочка")
ProgramPath = "c: \ test run script.vbs"
ProgramArgs = "/ привет / мир"
intWindowStyle = 1
WaitOnReturn = True
WshShell.Run Chr (34) & ProgramPath & Chr (34) & Space (1) & ProgramArgs, intWindowStyle, WaitOnReturn
  

ProgramPath — это полный путь к вашему скрипту, который вы хотите запустить.
ProgramArgs — это аргументы, которые вы хотите передать скрипту. (ПРИМЕЧАНИЕ: аргументы разделяются пробелом, если вы хотите использовать аргумент, содержащий пробел, вам придется заключить этот аргумент в кавычки [Безопасный способ сделать это — использовать CHR (34). Пример ProgramArgs = chr ( 34) & "/ Hello World" & chr (34) ])
IntWindowStyle — это целое число, определяющее способ отображения окна.Более подробную информацию об этом и WaitOnReturn можно найти здесь. WshShell.Run Method
WaitOnReturn, если true, то сценарий будет приостановлен до завершения команды, если false, сценарий продолжится сразу после запуска команды.

ПРИМЕЧАНИЕ. Метод Run может возвращать код выхода, но вы должны установить для WaitOnReturn значение True и назначить ‘WshShell.Run’ переменной. (Пример: ExitCode = WshShell.Run (Command, intWindowStyle, True) )

Использование EXEC (расширенный метод)

  Dim ProgramPath, WshShell, ProgramArgs, Процесс, ScriptEngine
Установите WshShell = CreateObject ("WScript.Оболочка")
ProgramPath = "c: \ test run script.vbs"
ProgramArgs = "/ привет / мир"
ScriptEngine = "CScript.exe"
Установите Process = WshShell.Exec (ScriptEngine & space (1) & Chr (34) & ProgramPath & Chr (34) & Space (1) & ProgramArgs)
Выполнить, пока Process.Status = 0
    'В настоящее время ожидает завершения выполнения программы.
    WScript.Sleep 300
Петля
  

ProgramPath такой же, как Run READ RUN ОПИСАНИЕ
ProgramArgs DITTO
ScriptEngine Движок, который вы будете использовать для выполнения сценария.поскольку для метода exec требуется приложение win32, вам необходимо указать это. Обычно это либо «WScript.exe», либо «CScript.exe». Обратите внимание, что для использования stdin и stdout (мы рассмотрим, что это такое, немного ниже), вы должны выбрать «CScript.exe».
Процесс — это объект, который ссылается на программу, запускаемую сценарием. Он состоит из нескольких членов: ExitCode, ProcessID, Status, StdErr, StdIn, StdOut, Terminate.

Подробнее о членах объекта процесса

  1. ExitCode Это код выхода, который возвращается при завершении процесса.
  2. ProcessID Это идентификатор, который назначается процессу, каждый процесс имеет уникальный идентификатор процесса.
  3. Статус Это кодовый номер, который указывает статус процесса, он устанавливается на «-1», когда процесс завершается.
  4. StdErr Это объект, который представляет стандартный поток ошибок
  5. .

  6. StdIn Это объект, который представляет стандартный входной поток, используйте его для записи дополнительных параметров или всего, что вы хотите передать в скрипт, который вы вызываете.( Process.StdIn.WriteLine "Hello Other Worlds" )
  7. StdOut Это объект, который представляет стандартный поток вывода. Он доступен ТОЛЬКО ДЛЯ ЧТЕНИЯ, поэтому вы можете использовать Process.StdOut.ReadLine . Это поток, в котором вызываемый сценарий будет получать любую информацию, отправленную stdin вызывающего сценария. Если вы использовали пример стандартного ввода, то StdOut.Readline вернет «Hello Other Worlds». Если читать нечего, скрипт зависнет в ожидании вывода. это означает, что сценарий будет выглядеть как Not Responding
    Примечание: вы можете использовать Read или ReadAll вместо ReadLine , если хотите.Используйте Read (X) , если вы хотите прочитать X символов. Или ReadAll , если вам нужна остальная часть потока.
  8. Terminate Вызовите этот метод, чтобы принудительно завершить процесс.

Для получения дополнительной информации о WshShell.Exec перейдите к Exec Method Windows Scripting Host

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

Windows Script Host позволяет запускать сценарии из командной строки. CScript.exe предоставляет переключатели командной строки для настройки свойств сценария.

Для запуска скриптов с помощью CScript.exe

Параметры хоста включают или отключают различные функции хоста сценариев Windows. Перед параметрами хоста ставятся две косые черты (//). Имя сценария — это имя файла сценария с расширением и необходимой информацией о пути, например d: \ admin \ vbscripts \ chart.vbs . Параметры и параметры сценария передаются сценарию. Перед параметрами скрипта стоит одинарная косая черта (/).

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

Несколько примеров сценариев, которые устанавливаются вместе с Windows Script Host, также доступны для загрузки по адресу (http://msdn.microsoft.com/scripting).

Предположим, для целей этого примера вы скопировали диаграмму.vbs в следующую папку на вашем компьютере:

Копировать код
 c: \ sample scripts \ chart.vbs 

Вы можете запустить сценарий с логотипом и без него следующим образом.

Для запуска скрипта с логотипом или без него

  1. Запустите командную строку MS-DOS.

  2. Введите следующие команды в командной строке (измените соответствующим образом, если ваши образцы сценариев находятся в другой папке):

    Копировать код
     cscript // logo c: \ "образцы скриптов" \ chart.vbs
    cscript // nologo c: \ "образец сценария" \ chart.VBScript 

Запуск кода макроса извне с помощью vbs и пакетного файла

У меня есть макрос, который копирует данные из нескольких книг в главную книгу. Я могу сделать это, только запустив макрос из Master wkbk. Однако я хочу иметь возможность запускать этот код извне (за пределами листа Excel).

Я пробовал использовать сценарий vb, но он сообщает мне, что у меня нет прав администратора для его запуска (у меня нет прав).Я также нашел где-то, где я мог бы использовать командный файл для запуска vbs, но, к сожалению, он не работает. Вот мой код макроса, сценарий VB и файл bat, предназначенный для внешнего запуска кода.

Код VB:

  Sub CopyRange ()
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Dim wkbDest As Workbook
    Dim wkbSource As Workbook
    Установите wkbDest = ThisWorkbook
    Dim LastRow As Long
    Const strPath As String = "C: \ Users \ G852589 \ cnq transfer \"
    ChDir strPath
    strExtension = Dir ("*.xlsx * ")
    Сделать пока strExtension <> ""
        Установите wkbSource = Workbooks.Open (strPath & strExtension)
        С wkbSource
            LastRow = .Sheets ("Sheet1"). Cells.Find ("*", SearchOrder: = xlByRows, SearchDirection: = xlPrevious) .Row
            .Sheets ("Sheet1"). Range ("A5: GJ" & LastRow) .Copy wkbDest.Sheets ("Sheet1"). Cells (Rows.Count, "A"). End (xlUp) .Offset (1, 0 )
            .Close savechanges: = False.
        Конец с
        strExtension = Dir
    Петля
    Application.ScreenUpdating = True
End Sub  

У меня есть сценарий VB:

  Dim args, objExcel

Установите args = WScript.Аргументы
Установите objExcel = CreateObject ("Excel.Application")

objExcel.Workbooks.Open args (0)
objExcel.Visible = Верно

objExcel.Run "OpenRange"

objExcel.ActiveWorkbook.Save
objExcel.ActiveWorkbook.Close (0)
objExcel.Quit  

И, наконец, файл bat, который я собираюсь запустить vbs с:

  cscript script.vbs "C: \ Users \ G852589 \ cnq transfer \ Result.xlsm"  

Result.xlsm — это мастер книга, в которой размещен код макроса. Файл bat ничего не делает после запуска, поэтому я был бы признателен, если бы кто-нибудь мог указать, где мой код неправильный или что я делаю неправильно

Запуск сценариев VBS и Java из командной оболочки

Запуск файлов VBScript и JScript из
Командная оболочка

Использование хоста сценариев Windows для запуска сценариев из
командная строка обсуждается.Приведены некоторые конкретные примеры.



Windows XP поставляется с двумя интерфейсами для запуска VBScript и JScript (Microsoft
версия JavaScript) файлы. По умолчанию используется графический пользовательский интерфейс с использованием Wscript.exe.
Однако существует также интерфейс командной строки Cscript.exe. это
часто удобнее использовать командную строку для скриптов и Windows XP собственно
поставляется с рядом полезных скриптов для системного администрирования, которые необходимо
запускаться из командной строки.

Настройка командной оболочки для запуска сценариев

Многие скрипты для управления компьютером удобнее запускать из команды
оболочка, чтобы пользователю не приходилось сталкиваться с осложнениями окон
и диалоговые окна из графического пользовательского интерфейса.Может быть легче справиться
вывод в командном окне. Один из способов запустить сценарий в командной строке — это
перед сценарием стоит исполняемый файл Cscript.exe. Например, заявление
формы cscript.exe
somescript.vbs
можно ввести в командную строку, а somescript.vbs будет
затем запустите в командном окне. Однако обратите внимание, что полный путь
обычно должны использоваться, а пути с пробелами должны быть заключены в кавычки
Метки. Чтобы сделать процессор сценариев Cscript хостом по умолчанию для сценариев, введите
в командную строку wscript
// H: cscript
Скрипты можно запустить, просто введя команду
строка somescript.vbs
по умолчанию можно вернуть в графический интерфейс с помощью команды wscript
// H: wscript

Некоторые сценарии, которые поставляются с Windows XP

, спрятаны в папке \ Windows \ System32 \ — это некоторые файлы
в формате VBScript, о котором большинство пользователей ПК никогда не слышали. Также входит в
два
системные пакеты инструментов, обсуждаемые на других страницах,
некоторые инструменты в виде скриптов. Некоторые из них действительно предназначены только для
администраторов, но есть несколько, которые могут быть полезны для обычного ПК
владелец.Они перечислены ниже. Подробнее об этих скриптах в Windows
Центр справки и поддержки XP. Запускать эти скрипты проще
если Cscript сделан интерфейсом по умолчанию.

Eventquery.vbs
Перечисляет события и свойства событий из одного или нескольких журналов событий. Может использоваться с фильтром для определения типов событий, которые следует включить в запрос или исключить из него.
Pagefileconfig.vbs
Позволяет администратору отображать и настраивать параметры виртуальной памяти файла подкачки системы
Prncnfg.vbs
Настраивает или отображает информацию о конфигурации принтера. Использовал
без параметров prncnfg.vbs отображает справку командной строки.
Prndrvr.vbs
Добавляет, удаляет и перечисляет драйверы принтера. При использовании без параметров prndrvr.vbs отображает справку командной строки.
Prnjobs.vbs
Приостанавливает, возобновляет, отменяет и выводит список заданий на печать. Используется без параметров,
prnjobs.vbs отображает справку командной строки.

Prnmngr.vbs
Добавляет, удаляет и перечисляет принтеры или подключения принтеров в дополнение к
установка и отображение принтера по умолчанию. При использовании без параметров prnmngr.vbs отображает справку командной строки.
Prnport.vbs
Кроме того, создает, удаляет и перечисляет стандартные порты принтера TCP / IP.
для отображения и изменения конфигурации порта. При использовании без параметров prnport.vbs отображает справку командной строки.
Prnqctl.vbs
Печатает тестовую страницу, приостанавливает или возобновляет работу принтера и очищает очередь печати.При использовании без параметров prnqctl.vbs отображает справку командной строки.

Инструмент командной строки инструментария управления Windows (WMIC)

WMIC — это командная строка
и интерфейс сценариев, который упрощает использование инструментария управления Windows.
(WMI).
WMIC основан на псевдонимах. Псевдонимы делают доступными первичные данные, предоставляемые WMI.
без необходимости разбираться в концепциях, специфичных для WMI. Более подробную информацию можно найти здесь.
Ссылка Microsoft. Информация также доступна на локальном компьютере по
ввод в командную строку WMIC
/?
Одним из способов использования WMIC является написание простых сценариев для автоматизации управления
компьютера.

В начало

Как создать, сохранить и запустить простую программу VBScript?

VBScript — это облегченная версия популярного Microsoft Visual Basic для написания сценариев, разработанная, как следует из названия, Microsoft. Он используется для разработки динамических веб-страниц. Он намного легче по сравнению с языком программирования Visual Basic, но работает как язык сценариев, например JavaScript. Чтобы запустить VBScript на стороне клиента, клиент должен использовать Internet Explorer, поскольку другие браузеры по-прежнему не поддерживаются VBScript.

Как создать программу на VBScript?

Как и многие другие простые языки сценариев, VBScript можно написать в простом текстовом редакторе, таком как блокнот и другие подобные программы (например, блокнот ++, Wordpad и т. Д.). Выполните следующие шаги, чтобы получить лучшее представление о создании программы VBScript:

Шаг 1: Откройте текстовый редактор по вашему выбору (здесь используется блокнот).

Шаг 2: А пока вот простая программа VBScript, которая будет отображать на экране простое диалоговое окно с сообщением.Код для такой программы на VBScript:

 a = msgbox («Доброго времени суток, товарищ, читатель GFG!», 0, «Создание программы VBSript») 

Код Пояснение: Вы можете указать все, что угодно. поскольку он следует правилам объявления переменных в VBScript вместо «a» в начале приведенного выше кода. Фактически, мы можем разбить и понять приведенный выше код следующим образом:

 put_any_Variable_name = msgbox («Ваш основной текст здесь», 0, «Ваш текст заголовка здесь») 

Чтобы изменить свойство диалогового окна с В отношении того, что вам нужно, обратитесь к следующим данным:

Код Свойство
0 Отображается только кнопка «ОК».
1 Отобразятся кнопки ОК и Отмена.
2 Отобразятся кнопки «Прервать», «Повторить попытку» и «Игнорировать».
3 Отобразятся кнопки «Да», «Нет» и «Отмена».
4 Отобразятся кнопки «Да» и «Нет».
5 Отобразятся кнопки «Повторить» и «Отмена».
16 Значок критического сообщения будет отображаться в диалоговом окне
32 Значок запроса предупреждения будет отображаться в диалоговом окне
48 Значок предупреждающего сообщения будет отображаться в диалоговом окне окно
64 Значок информационного сообщения будет показан в диалоговом окне
0 Первая кнопка станет стандартной
256 Вторая кнопка станет стандартной
512 Третья кнопка станет стандартной
768 Четвертая кнопка станет стандартной
0 Запускает модальное приложение (в основном, текущее приложение перестанет работать, пока пользователь не ответит на диалоговое окно)
4096 Запускает модальное окно системы (в основном, все приложения перестают работать, пока пользователь (отображается в диалоговом окне)

Измените «0» в написанном выше коде на любой из чисел, указанных выше.
Чтобы получить более одного вышеупомянутого свойства в диалоговом окне, вы можете просто написать, например: «0 + 16» вместо «0» в приведенном выше коде.
Для справки, код:

 hydro = msgbox («Не забывай пить воду!», 0 + 64, «Проверка гидратации») 

даст следующий результат:

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

Как сохранить программу VBScript?

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

Шаг 1: Нажмите Ctrl + Shift + S на клавиатуре или щелкните Файл> Сохранить как в окне блокнота, откроется диалоговое окно Сохранить как, спрашивающее, где , чтобы сохранить текущий документ блокнота.

Шаг 2: Теперь напишите любое имя файла по вашему выбору для этого документа блокнота, но убедитесь, что вы написали .vbs в качестве его расширения. Не забудьте добавить «.vbs» после написания имени файла в поле «Имя файла:».

Шаг 3: Теперь измените значение поля «Сохранить как тип:» с «Текстовые документы (* .txt)» на «Все файлы (*. *)», Щелкнув по нему с помощью раскрывающегося меню. .

Шаг 4: Наконец, нажмите «Сохранить» после выбора подходящего места для сохранения файла.

Как запустить программу VBScript?

Теперь это очень просто сделать, просто дважды щелкните сохраненный файл .vbs из того места, где вы его сохранили, и вуаля! Он запустится и выдаст следующий результат:

Запуск сценариев с WScript.exe

WScript.exe — это версия Windows Script Host, которая позволяет запускать сценарии из
Windows. WScript.exe предоставляет диалоговое окно Windows для настройки свойств сценария.
Используя WScript.exe, вы можете запускать скрипты под Windows следующими способами:

  • Дважды щелкните файлы или значки. Это могут быть файлы или значки, перечисленные в «Мой компьютер», в проводнике Windows, в окне Find , в меню «Пуск » или на рабочем столе.
  • Введите имя сценария в команде Run в меню Start . Нажмите кнопку Start ,
    выберите Выполнить , а затем введите полное имя сценария, который вы хотите запустить, включая расширение файла и любую необходимую информацию о пути.
  • Введите WScript.exe, за которым следует имя сценария, в команде Run . Нажмите кнопку Start , выберите Run и введите WScript,
    за которым следует полное имя и путь к сценарию, который вы хотите запустить.

Если дважды щелкнуть файл сценария, расширение которого еще не связано с WScript.exe,
Появится диалоговое окно « Открыть с помощью » с вопросом, какую программу использовать для открытия файла.
Выберите WScript и отметьте Всегда использовать эту программу, чтобы открывать этот файл отметьте, чтобы
зарегистрируйте WScript как приложение по умолчанию для всех файлов, имеющих то же расширение, что и
тот, который вы дважды щелкнули.Например, если вы установите этот флажок при запуске
Chart.vbs, WScript.exe становится приложением по умолчанию для всех файлов с расширением .vbs.

В диалоговом окне свойств WScript.exe доступны следующие параметры:

Свойство Описание Эквивалент CSCRIPT
Остановить скрипт через указанное количество секунд. Задает максимальное количество секунд, в течение которых сценарий может запускаться.По умолчанию ограничений нет. // T: nn
Отображение логотипа при выполнении сценария в командной консоли. Показывает баннер перед запуском сценария. Это значение по умолчанию. Противоположное // nologo. // логотип или
// nologo

Используя диалоговое окно WScript.exe Properties , вы можете настроить глобальные сценарии.
параметры для всех сценариев, которые WScript запускает на локальном компьютере. Вы также можете установить
варианты для отдельных скриптов, используя.wsh файл. Дополнительные сведения см. В разделе «Настройка свойств сценария».

Когда Windows Script Host поставляется с Windows NT® 2000, вы больше не будете
необходимо указать расширение файла сценария. Вместо этого вы можете ввести скрипт
имя или дважды щелкните сценарий в проводнике Windows.

Windows 10 не может найти файл сценария run.vbs [ИСПРАВЛЕНО]

Чтобы убедиться, что ваша система не содержит вредоносных программ, мы советуем вам выполнить полное сканирование системы с помощью антивируса.Стоит отметить, что не все антивирусные инструменты одинаково эффективны, поэтому вы можете рассмотреть наши лучшие решения.

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


4. Измените реестр

Если на вашем компьютере появляется ошибка run.vbs, возможно, проблема в вашем реестре. Иногда вредоносные приложения могут изменять ваш реестр и вызывать появление этой проблемы.

Однако вы можете решить эту проблему, просто внеся пару изменений в реестр.Для этого просто выполните следующие действия:

  1. Нажмите Windows Key + R и введите regedit. Теперь нажмите Enter или нажмите OK.
  2. Когда откроется редактор реестра, перейдите к HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon на левой панели. На правой панели дважды щелкните значение Userinit.
  3. Убедитесь, что для параметра «Значение» задано значение «C: Windowssystem32userinit.exe», и нажмите «ОК», чтобы сохранить изменения.

Иногда ваш компьютер может быть заражен вредоносным ПО, и это вредоносное ПО изменяет значение Userinit в вашем реестре.Однако после изменения реестра проблема должна быть полностью решена.

Запустите сканирование системы для обнаружения потенциальных ошибок

Нажмите Начать сканирование , чтобы найти проблемы с Windows.

Нажмите Восстановить все , чтобы исправить проблемы с запатентованными технологиями.

Запустите сканирование ПК с помощью Restoro Repair Tool, чтобы найти ошибки, вызывающие проблемы с безопасностью и замедление.После завершения сканирования в процессе восстановления поврежденные файлы заменяются новыми файлами и компонентами Windows.

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

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

  1. Нажмите Ctrl + Shift + Esc, чтобы открыть диспетчер задач.
  2. Когда откроется Диспетчер задач, выберите «Файл»> «Запустить новую задачу».
  3. Войдите в regedit и нажмите Enter.

После открытия редактора реестра следуйте инструкциям выше, чтобы изменить значение Userinit.


Windows 10 не завершает задачу в диспетчере задач? Все, что вам нужно знать, чтобы это исправить, находится прямо здесь.


5. Измените значение ключа .vbs в реестре

По словам пользователей, ошибка run.vbs может появиться на вашем ПК из-за изменения значения ключа .vbs. Чтобы решить эту проблему, вам необходимо сделать следующее:

  1. Откройте редактор реестра, как мы показали вам в предыдущем решении.
  2. Перейдите к ComputerHKEY_CLASSES_ROOT.vbs на левой панели. На правой панели дважды щелкните значение (По умолчанию).
  3. Установите для параметра Value значение VBSFile и нажмите OK.

После внесения этих изменений проверьте, решена ли проблема.


6. Выполните сканирование SFC и DISM

Если на вашем компьютере возникает ошибка run.vbs, причиной может быть повреждение системных файлов. Однако вы можете решить эту проблему, просто запустив сканирование SFC и DISM на своем ПК.Для этого выполните следующие действия:

  1. Нажмите Windows Key + X, чтобы открыть меню Win + X. Выберите командную строку (администратор) или PowerShell (администратор).
  2. Когда запустится командная строка, введите команду sfc / scannow и запустите ее.
  3. Теперь начнется сканирование SFC. Имейте в виду, что сканирование может занять около 15 минут, поэтому не мешайте ему.

После завершения сканирования SFC проблема должна быть решена. Если эта проблема все еще присутствует, вам необходимо выполнить сканирование DISM.Вы можете сделать это, выполнив следующие действия:

  1. Запустите командную строку от имени администратора.
  2. Запустите команду DISM / Online / Cleanup-Image / RestoreHealth.
  3. Теперь начнется сканирование DISM. Это сканирование может занять около 20 минут или больше, поэтому не прерывайте его.

После завершения сканирования DISM проверьте, сохраняется ли проблема. Если в Windows 10 произошел сбой DISM, исправьте его с помощью этого полного руководства.

Если вы не видите ничего, кроме черного экрана, вам придется запустить командную строку, выполнив следующие действия:

  1. Нажмите Ctrl + Shift + Esc, чтобы запустить диспетчер задач.
  2. Теперь перейдите в Файл> Запустить новую задачу.
  3. Введите cmd и обязательно установите флажок «Создать эту задачу с правами администратора». Теперь нажмите ОК или нажмите Enter.
  4. После запуска командной строки запустите сканирование SFC и DISM.

7. Перейдите в безопасный режим

Safe Mode — это сегмент Windows, который работает с настройками по умолчанию, поэтому он идеально подходит для устранения проблем, таких как ошибка run.vbs. Чтобы войти в безопасный режим, выполните следующие действия:

  1. Перезагрузите компьютер несколько раз во время загрузки.
  2. Вы увидите три доступных варианта. Выберите Устранение неполадок> Дополнительные параметры> Параметры запуска. Нажмите кнопку «Перезагрузить».
  3. Ваш компьютер будет перезагружен. После загрузки ПК выберите любую версию безопасного режима, нажав соответствующую клавишу на клавиатуре.

После входа в безопасный режим проверьте, сохраняется ли проблема. Если проблема не появляется в безопасном режиме, вы можете использовать ее, чтобы решить проблему.


8. Создайте новую учетную запись пользователя

Если вы продолжаете бежать.vbs на вашем компьютере, вы можете решить проблему, просто создав новую учетную запись пользователя. Иногда эта проблема может повлиять только на вашу учетную запись, но вы можете исправить это, выполнив следующие действия:

  1. Перейдите в приложение «Настройки»> «Учетные записи».
  2. Перейти к семье и другим людям. На правой панели выберите Добавить кого-нибудь на этот компьютер.
  3. Выберите У меня нет данных для входа этого человека.
  4. Далее выберите Добавить пользователя без учетной записи Microsoft.
  5. Введите желаемое имя пользователя и нажмите Далее.

Если вы не можете получить доступ к приложению «Настройки» из-за этой проблемы, вы можете создать учетную запись пользователя из командной строки. Для этого выполните следующие действия:

  1. Запустите командную строку от имени администратора.
  2. Когда запустится командная строка, выполните следующие команды:
  • чистый пользователь / добавьте your_username
  • новых администраторов локальной группы your_username / add

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

Если проблема отсутствует в новой учетной записи, переместите в нее свои личные файлы и начните использовать ее вместо старой.

Ошибка

Run.vbs может сильно раздражать, но мы надеемся, что вам удалось исправить ее с помощью одного из наших решений.