PowerShell и другие скрипты

15.1.2009

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

Рубрика: Scripting, Tips, VBScript — Xaegr @ 12:22

Да, как ни странно у 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 вам в руки и удачи ;)

Комментарии (2) »

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

    Комментарий от Konstantin Leontiev — 18.1.2009 @ 0:55

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

    Комментарий от Xaegr — 18.1.2009 @ 11:04


RSS-лента комментариев к этой записи. URI для обратной ссылки

Оставить комментарий

Блог на WordPress.com.