1 (изменено: Starley25, 2012-07-28 09:13:26)

Тема: VBS: Зарегистрировать сервис

Необходимо зарегистрировать сервис на удаленной машине, раньше делалось командой:

psexec @c:\computers.txt c:\WINNT\system32\instsrv.exe Fin c:\WINNT\system32\srvany.exe /Y

Как реализовать тоже самое, но на VBS?

2

Re: VBS: Зарегистрировать сервис

И что совсем никто не знает?

3

Re: VBS: Зарегистрировать сервис

Эту часть:

psexec @c:\computers.txt …

— можно.

Эту:

c:\WINNT\system32\instsrv.exe Fin c:\WINNT\system32\srvany.exe /Y

— на WSH реализовать нельзя.

Что Вас интересует?

4

Re: VBS: Зарегистрировать сервис

То есть задачу по регистрации сервиса решить скриптом на VBS не представляется возможным? Я не претендовал на реализацию в точности, так как было раньше, просто указал способ используемый в bat-файле.

5

Re: VBS: Зарегистрировать сервис

Starley25, зарегистрировать службу из предназначенного для того приложения можно любым способом, но попытаться создать службу из стороннего приложения (как в Вашем примере) можно только с помощью специально предназначенного для этого способа — instsrv.exe & srvany.exe: Создание определяемой пользователем службы.

6

Re: VBS: Зарегистрировать сервис

Я регистрировал следующим образом:


Const scrFileName = "MyScript.vbs"
Const ServiceName = "MyService"
Const HKLM = &H80000002   

With CreateObject("Scripting.FileSystemObject")
   sPathName = .BuildPath(.GetParentFolderName(.GetFile(WScript.ScriptFullName)),"srvany.exe")   
   sParamName = "wscript.exe " &.BuildPath(.GetParentFolderName(.GetFile(WScript.ScriptFullName)),scrFileName)
End With

Set objWMI = GetObject("winmgmts:\\.\Root\CIMV2")      
Set objInstance = objWMI.Get("Win32_Service")
Set objMethod = objInstance.Methods_("Create")
Set objInParam = objMethod.inParameters.SpawnInstance_()

'задаем параметры
objInParam.Name = ServiceName
objInParam.DisplayName = "My Interactive Service"
objInParam.StartMode = "Automatic"
objInParam.DesktopInteract = True
objInParam.PathName = sPathName
'создаем службу
Set objOutParam = objInstance.ExecMethod_("Create", objInParam)

If objOutParam.ReturnValue <> 0 Then
   MsgBox "Не удалось создать службу " & ServiceName
   WScript.Quit
End If
   
'создаем ключи реестра, чтобы запускать srvany.exe с параметром - нашим скриптом
sKeyPath = "SYSTEM\CurrentControlSet\Services\" & ServiceName & "\Parameters"
With GetObject("winmgmts:\\.\root\default:StdRegProv")
   .CreateKey HKLM,sKeyPath
   .SetStringValue HKLM,sKeyPath,"Application",sParamName
End With

If Err.Number <> 0 Then
   MsgBox "Не удалось создать ключи реестра " & ServiceName
   WScript.Quit
End If

'запускаем службу
Set colServices = objWMI.ExecQuery("SELECT * FROM Win32_Service WHERE Name='" & ServiceName & "'")
If colServices.Count Then
   For Each objService In colServices
      ret = objService.StartService
      If ret <> 0 Then
         MsgBox "Не удалось запустить службу " & ServiceName
         WScript.Quit
      End If
   Next
Else
   MsgBox "Не удалось создать службу " & ServiceName
   WScript.Quit
End If

MsgBox "Служба " & ServiceName & " установлена и запущена"

В этом примере srvany и скрипт, который запускается в качестве службы находятся в том же каталоге, что и скрипт регистрации службы.

7 (изменено: Starley25, 2012-08-01 08:56:53)

Re: VBS: Зарегистрировать сервис

Пока писал ответ уже и решение нашлось .
Скрипт от dab00 то, что доктор прописал.
Это локально, а как удаленно можно выкрутиться, запустить все это чудо на удаленной машине?

8

Re: VBS: Зарегистрировать сервис

Starley25 пишет:

Это локально, а как удаленно можно выкрутиться, запустить все это чудо на удаленной машине?

Копируете srvany и скрипт, который должен запускаться в качестве службы в шару на удаленном компе, подключаетесь к wmi удаленного компа: или "winmgmts:\\" & ИмяКомпа, или от имени пользователя - через SWbemLocator, далее по тексту.

9 (изменено: Rom5, 2012-08-01 13:13:21)

Re: VBS: Зарегистрировать сервис

dab00, а можно пример запуска приложения от имени учетки пользователя с помощью SWbemLocator?

Хочу стартовать "gpupdate.exe /force" от имени пользователя на удаленной машине, знаю только способ с созданием одноразового задания в шедулере машины.

WBR. Roman

10 (изменено: dab00, 2012-08-01 14:03:31)

Re: VBS: Зарегистрировать сервис

Пример

11

Re: VBS: Зарегистрировать сервис

этож пипец как набрать help

Я конечно далек от мысли... (с)

12

Re: VBS: Зарегистрировать сервис

dab00 Предоставленный вами скрипт не работает,
Const scrFileName = "Speed_Met.vbs"
Const ServiceName = "SpeedCP"
положил в корень диска с, своей же машины ваш скрипт, туда же положил скрипт который нужно запускать Speed_Met.vbs от имени сервиса и там же srvany.exe. После запуска вашего скрипта ошибка: "Не удалось создать службу SpeedCP", сообщение из этой части кода:

If objOutParam.ReturnValue <> 0 Then
   MsgBox "Не удалось создать службу " & ServiceName

13

Re: VBS: Зарегистрировать сервис

Скрипт предоставляется "как есть" . Может прав не хватает?

14 (изменено: Starley25, 2012-08-09 09:25:40)

Re: VBS: Зарегистрировать сервис

Права самые самые  .

15

Re: VBS: Зарегистрировать сервис

а что команду sc уже отменили ?

Я конечно далек от мысли... (с)

16

Re: VBS: Зарегистрировать сервис

А у меня другой вопросец появилсо
Мне нужно сервис запустить от имени локального админа, для этого в параметры создания сервиса добавил

objInParam.StartName = ".\locadmlogin"
objInParam.StartPassword = "locadmpassword"

Но ругаеться ошибкой "Не возможно создать службу"

Времени не хватает... :-(

17

Re: VBS: Зарегистрировать сервис

Попробовал, работает... Попробуйте явно прописать путь sPathName и sParamName.
Как вариант используйте совет уважаемого smaharbA - cs /?

18

Re: VBS: Зарегистрировать сервис

smaharbA советовал sc.exe .

19

Re: VBS: Зарегистрировать сервис

alexii пишет:

smaharbA советовал sc.exe .

Я и имел ввиду sc, сорри, очепятка, sc /?