Да, как ни странно у VBScript (точнее у Windows Scripting Host) тоже есть возможности запуска скриптов на удалённых компьютерах. Правда эта функция не получила большой популярности, и скорее всего из за того что требует немало подготовительных мероприятий, которые крайне плохо документированы.
Итак, для запуска скрипта на другом компьютере с помощью VBS нам понадобится:
- Права администратора на удалённом компьютере. Ну это само собой разумеется, и требуется почти во всех методах запуска которые я перечислял в блоге.
- Разрешить WSH Remote Scripting создав строковой параметр Remote равный “1” в ключе реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings - Из за бага 311269, на системах с Windows XP необходимо выполнить команду wscript –regserver. В SP3 ошибка вроде как исправлена.
- Необходимо отключить Firewall (или разрешить обращения к DCOM в исключениях) на обоих компьютерах. Да, да, и на том с которого запускаете сценарий, тоже (спасибо Косте Леоньтеву, я бы не догадался
) - В системах XP SP2 и выше необходимо изменить параметры безопасности (это можно сделать с помощью групповой политики). В узле Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\ меняем разрешения следующим образом:
DCOM: Machine Access Restrictions in Security Descriptor Definition Language (SDDL) syntaxВыдать группам Anonymous Logon и Everyone разрешения Allow Local и Allow Remote AccessDCOM: 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 вам в руки и удачи









Вася, для работы решения на Vista я думаю, придется начать с UAС.
Комментарий от Konstantin Leontiev — 18.1.2009 @ 0:55
2 Konstantin Leontiev: Видимо да… Его можно только отключить или есть еще варианты потрепыхаться?
PS: Хорошо что это просто факультативная задачка и есть множество более нормальных способов
Комментарий от Xaegr — 18.1.2009 @ 11:04