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

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

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

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

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTSOut = objFSO.CreateTextFile("C:\log.txt", True)
objTSOut.WriteLine "Script executed"
objTSOut.Close

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

Set objController = CreateObject("WshController")
Set objRemoteScript = objController.CreateScript( "C:\test.vbs", "computer1")
WScript.ConnectObject objRemoteScript, "remote_"
objRemoteScript.Execute

Do While objRemoteScript.Status <> 1
    WScript.Sleep 1000
Loop

MsgBox "Script complete"

Sub remote_Error
    Dim objError
    Set objError = objRemoteScript.Error
    WScript.Echo "Error - Line: " & objError.Line & _
        ", Char: " & objError.Character & vbCrLf & _
            "Description: " & objError.Description
    WScript.Quit -1
End Sub

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

Более подробно можно прочитать у Scripting Guys — http://www.microsoft.com/technet/scriptcenter/topics/remote/rscripting.mspx

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

Опубликовано в Scripting, Tips, VBScript. 2 комментария »

комментария 2 to “Запуск процесса на удалённом компьютере – VBS Remote Scripting”

  1. Konstantin Leontiev Says:

    Вася, для работы решения на Vista я думаю, придется начать с UAС.

  2. Xaegr Says:

    2 Konstantin Leontiev: Видимо да… Его можно только отключить или есть еще варианты потрепыхаться?🙂
    PS: Хорошо что это просто факультативная задачка и есть множество более нормальных способов🙂


Обсуждение закрыто.

%d такие блоггеры, как: