Также при настройке режима выполнения удаленных сценариев нужно проверить значение параметра
HKLMSoftwareMicrosoftWindows Script HostSettingsIgnoreUserSettings
(В)
Если значением этого параметра является 1, то параметр (Б) игнорируется и проверяется только значение параметра (А). Если же значением параметра (В) является 0, то WSH сначала проверяет параметр (Б) и только в случае его отсутствия принимается во внимание значение параметра (А).
Если удаленные сценарии нужно выполнять на машине с операционной системой Windows ХР, то на этой машине нужно перерегистрировать сервер wscript.exe с помощью следующей команды:
wscript.exe -regserver
Удаленные сценарии всегда запускаются с помощью сервера wscript.exe, причем в этих сценариях не поддерживается вывод на экран удаленного компьютера никаких элементов пользовательского интерфейса (не выводятся даже диалоговые окна с сообщениями о возникающих в ходе выполнения ошибках). Другими словами, в удаленных сценариях по умолчанию нельзя использовать методы WScript.Echo
или WshShell.Popup
(это может привести к непредсказуемым результатам).
Для примера рассмотрим сценарий RemoteShortcut.js (листинг 2.52), который создает ярлык в специальной папке AllUserDesktop (рабочий стол для всех пользователей). Предположим, что этот сценарий находится в корневом каталоге диска D:, а запустить сценарий необходимо на компьютере \Stand.
/*****************************************************************/
/* Имя: RemoteShortcut.js */
/* Описание: Создание ярлыка на рабочем столе */
/*****************************************************************/
var WshShell,MyShortcut,PathTarg,PathShortcut;
//Создаем объект WshShell
WshShell = WScript.CreateObject('WScript.Shell');
//Определяем путь к папке 'AllUsersDesktop' (рабочий стол
//всех пользователей)
PathShortcut = WshShell.SpecialFolders('AllUsersDesktop');
//Создаем объект-ярлык
MyShortcut = WshShell.CreateShortcut(PathShortcut+ '\From Remote WSH.lnk');
//Устанавливаем путь к файлу
PathTarg=WshShell.ExpandEnvironmentStrings('%windir%\notepad.exe');
MyShortcut.TargetPath = PathTarg;
MyShortcut.Save(); //Сохраняем ярлык
/************* Конец *********************************************/
Для запуска сценария RemoteShortcut.js на удаленном компьютере \Stand нужно создать другой сценарий RunRemoteScript.js (листинг 2.53). Здесь вначале создается объект WshController
:
Controller = WScript.CreateObject('WshController');
Затем мы получаем ссылку на экземпляр объекта WshRemote
на машине \Stand, соответствующий сценарию с текстом, взятым из файла D:RemoteScript.js:
RemScript = Controller.CreateScript('D:\RemoteScript.js', 'stand');
Запускается удаленный сценарий с помощью метода Execute
:
RemScript.Execute();
После этого нужно дождаться окончания работы сценария на удаленной машине, что делается путем контроля в цикле while
свойства Status
объекта WshRemote
(значение свойства status, равное 2, говорит о том, что выполнение удаленного сценария завершено):
while (RemScript.Status != 2)
//Цикл выполняется до завершения удаленного сценария
WScript.Sleep(100); //Приостанавливаем сценарий на 0,1 сек
Метод Sleep
объекта WScript
вызывается в цикле для того, чтобы освободить процессор во время ожидания завершения удаленного сценария (листинг 2.53).
/********************************************************************/
/* Имя: RunRemoteScript.js */
/* Язык: JScript */
/* Описание: Запуск удаленного сценария */
/********************************************************************/
var Controller, RemScript; //Объявляем переменные
//Создаем объект WshController
Controller = WScript.CreateObject('WshController');
//Создаем сценарий на удаленной машине (объект WshRemote)
RemScript = Controller.CreateScript('D:\RemoteScript.js', 'stand');
RemScript.Execute(); //Запускаем удаленный сценарий
WScript.Echo('Удаленный сценарий запущен');
while (RemScript.Status != 2)
//Цикл выполняется до завершения удаленного сценария
WScript.Sleep(100); //Приостанавливаем сценарий на 0,1 сек
WScript.Echo('Выполнение удаленного сценария завершено');
/************* Конец *********************************************/
В листинге 2.54 приведен аналог сценария RunRemoteScript.js на языке VBScript.
'********************************************************************
' Имя: RunRemoteScript.vbs
' Язык: VBScript
' Описание: Запуск удаленного сценария
'********************************************************************
Option Explicit
Dim Controller, RemScript ' Объявляем переменные
' Создаем объект WshController
Set Controller = WScript.CreateObject('WshController')
' Создаем сценарий на удаленной машине (объект WshRemote)
Set RemScript = Controller.CreateScript('D:\RemoteScript.js', 'stand')
RemScript.Execute ' Запускаем удаленный сценарий
WScript.Echo 'Удаленный сценарий запущен'
While RemScript.Status <> 2
' Цикл выполняется до завершения удаленного сценария
WScript.Sleep 100 ' Приостанавливаем сценарий на 0,1 сек
Wend
WScript.Echo 'Выполнение удаленного сценария завершено'
'************* Конец *********************************************
Контролировать ход выполнения удаленных сценариев можно не только путем анализа свойства Status
, но и с помощью обработки событий Start
(запуск сценария), Error
(ошибка при выполнении сценария) и End
(завершение работы сценария) объекта WshRemote; соответствующие примеры сценариев на языках JScript и VBScript приведены в листингах 2.55 и 2.56.
Напомним, что для обработки событий объекта нужно в сценарии сначала создать экземпляр этого