Главная

Wednesday, 13 October 2021

ScriptRunner как диспетчер скриптов.

Всем привет.

В Windows 10 есть такая прикольная утилита как ScriptRunner. Она позволяет запускать один или нескольких скриптов или исполняемых файлов. Утилита ScriptRunner.exe изначально разрабатывалась для применения в средствах виртуализации приложений Microsoft (App-V). Данная технология позволяет системным администраторам делать определенные приложения доступными для конечных пользователей, не устанавливая эти приложения непосредственно на их компьютеры. Утилита устанавливалась как часть средства виртуализации приложений и использовалась в качестве средства запуска множества сценариев по одному триггеру (запускающему событию). Средство виртуализации приложений App-V входит в состав пакета оптимизации рабочего стола Майкрософт (MDOP), который входит в состав подписки Microsoft Software Assurance.

Для получения подсказки по применению ScriptRunner.exe используется команда:

ScriptRunner /?

Формат командной строки:

ScriptRunner.exe -appvscript scriptFileName [Arguments] [-appvscriptrunnerparameters [-wait] [-timeout=] [-rollbackonerror]]

Параметры командной строки:

-appvscript - этот параметр задает имя файла сценария, исполняемого или командного файла (scriptFileName) и аргументы командной строки (Arguments), если они есть.

-appvscriptrunnerparameters - этот параметр определяет режим ожидания завершения сценария (-wait) и интервал ожидания в секундах (-timeout=TimeInSeconds), а также режим выполнения при возникновении ошибки (-rollbackonerror). 

По умолчанию для параметра -appvscriptrunnerparameters приняты значения – нет ожидания, нет таймаута, нет обработки ошибок ( No wait, No timeout, No rollback on error).

Параметры разделяются символом пробела в Unicode (U+0020).

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

Если команда Scriptrunner содержит более одного предложения -appvscript, откат при ошибке может не работать ни для одного из сценариев.

Примеры использования:

- запустить приложение “Блокнот” (notepad.exe) и приложение ”Wordpad” (write.exe):

ScriptRunner.exe -appvscript notepad.exe -appvscript write.exe 

- запустить приложение “Блокнот” (notepad.exe) и ждать его завершения, после чего запустить приложение ”Wordpad” (write.exe):

ScriptRunner.exe -appvscript notepad.exe -appvscriptrunnerparameters -wait -appvscript write.exe 

- запустить приложение "Блокнот" для просмотра файла журнала cbs.log и, если через 30 секунд приложение не будет закрыто, завершить его и открыть этот же файл для просмотра в редакторе WordPad:

ScriptRunner.exe -appvscript notepad.exe C:\Windows\Logs\CBS\CBS.log -appvscriptrunnerparameters -wait -timeout=30 -appvscript write.exe C:\Windows\Logs\CBS\CBS.log 

Если же добавить параметр -rollbackonerror, то результат будет иным – запустится только "Блокнот":

ScriptRunner.exe -appvscript notepad.exe C:\Windows\Logs\CBS\CBS.log -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror -appvscript write.exe C:\Windows\Logs\CBS\CBS.log

В данном случае, если Блокнот не был закрыт в течении 30 секунд пользователем, он будет принудительно завершен (Terminating process on timeout ) и это воспринимается как ошибка сценария (Script failed. RetCode = 1)

Можно использовать паузу при выполнении команды:

ScriptRunner.exe -appvscript cmd "/c" "pause" -appvscriptrunnerparameters -wait -timeout=20

Можно использовать разные параметры для разных скриптов в одной строке:

ScriptRunner.exe -appvscript demoА.cmd arg1 arg2 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror -appvscript demoB.ps1 arg3 arg4 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror

Можно даже использовать XML-файлы в качестве конфига для ScriptRunner-а:

ScriptRunner in DeploymentConfig.xml, UserConfig.xml and AppxManifest.xml files (all trigger events).

Например такого содержания:

<MachineScripts>

 <AddPackage>

   <Path>ScriptRunner.exe>/Path>

   <Argument>

   -appvscript script1.exe arg1 arg2 –appvscriptrunnerparameters –wait –timeout=10

   -appvscript script2.vbs arg1 arg2

   -appvscript script3.cmd arg1 arg2 –appvscriptrunnerparameters –wait –timeout=30 –rollbackonerror

   </Arguments>

   <Wait timeout="40" RollbackOnError="true"/>

 </AddPackage>

</MachineScripts>

Успехов.

No comments:

Post a Comment

А что вы думаете по этому поводу?