Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также любые проблемы программирования на различных макроязыках и в скриптовых средах)

Запуск скриптов WSH на удалённых компьютерах с помощью объекта WshRemote

С помощью объектов WshController и WshRemote сценарии Windows Script Host можно запускать не только на локальной машине, но и на удалённых компьютерах, имеющихся в сети. При этом исполняемый сценарий не будет явно копироваться на жёсткий диск удалённого компьютера, а работа будет происходить по протоколу DCOM (Distributed COM). Примеры кода WSH в настоящей статье будут приводиться на языке VBScript.


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


Объект WshController создаётся следующим образом:

Set oCtrl = CreateObject("WshController")

Объект WshController имеет единственный метод CreateScript(CommandLine, [MachineName]), который возвращает указатель на объект WshRemote, с помощью которого можно контролировать состояние удалённого сценария и управлять его выполнением. Первый параметр содержит путь к файлу относительно локальной машины (файл может находиться на каком-либо сетевом ресурсе; это делает возможным, работая на одном компьютере, загружать скрипт с другого и выполнять его на третьем компьютере).

Свойства объекта WshRemote:


Status Состояние асинхронно работающего сценария. Возможные значения:
  • 0 (NoTask) — сценарий не запущен;
  • 1 (Running) — сценарий выполняется;
  • 2 (Finished) — сценарий завершён.
Error Ссылка на объект WshRemoteError, содержащий информацию об ошибках.

Методы объекта WshRemote:


Execute() Запускает сценарий.
Terminate() Прерывает исполнение сценария.

События объекта WshRemote:


Start Начало выполнения сценария.
Error Аварийное завершение выполнения сценария.
End Нормальное или аварийное завершение выполнения сценария.

Свойства объекта WshRemoteError (методов у него нет):


Description Краткое описание ошибки (может быть пустым).
Line Номер строки сценария (если его нельзя определить, содержит 0).
Character Номер символа в строке (если его нельзя определить, содержит 0).
Number Код ошибки (число).
SourceText Строка сценария (если её нельзя определить, содержит 0).
Source Название COM-объекта — источника ошибки.

В качестве примера рассмотрим скрипт lnk.vbs, создающий ярлык на Рабочем столе для всех пользователей:

Set WshShell = CreateObject("WScript.Shell")
PathShortcut = WshShell.SpecialFolders("AllUsersDesktop")
Set Shortcut = WshShell.CreateShortcut(PathShortcut & "\Remote.lnk")
Target = WshShell.ExpandEnvironmentStrings("%windir%\notepad.exe")
Shortcut.TargetPath = Target
Shortcut.Save()

Запустим этот скрипт на удалённой машине \\home:

Set oCtrl = CreateObject("WshController")
Set oScript = oCtrl.CreateScript("C:\Temp\Testing\lnk.vbs", "home")
WScript.ConnectObject oScript, "Remote_" ' подключаемся к событиям
oScript.Execute()
IsQuit = False
While Not IsQuit
    Wscript.Sleep 100
Wend
'========================================================================================
Function Remote_End()
    Wscript.Echo "Выполнение удалённого сценария завершено."
    IsQuit = True
End Function
Function Remote_Error()
    Wscript.Echo oScript.Error.Description
    IsQuit = True
End Function
Function Remote_Start()
    Wscript.Echo "Начато выполнение удалённого сценария."
End Function

См. также статью Рецепты WMI: управление процессами.

Людоговский Александр, 07.02.2009г.

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.