Тема: VBS: Зарегистрировать сервис
Необходимо зарегистрировать сервис на удаленной машине, раньше делалось командой:
psexec @c:\computers.txt c:\WINNT\system32\instsrv.exe Fin c:\WINNT\system32\srvany.exe /YКак реализовать тоже самое, но на VBS?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Необходимо зарегистрировать сервис на удаленной машине, раньше делалось командой:
psexec @c:\computers.txt c:\WINNT\system32\instsrv.exe Fin c:\WINNT\system32\srvany.exe /YКак реализовать тоже самое, но на VBS?
И что совсем никто не знает?
Эту часть:
psexec @c:\computers.txt …— можно.
Эту:
c:\WINNT\system32\instsrv.exe Fin c:\WINNT\system32\srvany.exe /Y— на WSH реализовать нельзя.
Что Вас интересует?
То есть задачу по регистрации сервиса решить скриптом на VBS не представляется возможным? Я не претендовал на реализацию в точности, так как было раньше, просто указал способ используемый в bat-файле.
Starley25, зарегистрировать службу из предназначенного для того приложения можно любым способом, но попытаться создать службу из стороннего приложения (как в Вашем примере) можно только с помощью специально предназначенного для этого способа — instsrv.exe & srvany.exe: Создание определяемой пользователем службы.
Я регистрировал следующим образом:
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 и скрипт, который запускается в качестве службы находятся в том же каталоге, что и скрипт регистрации службы.
Пока писал ответ уже и решение нашлось
.
Скрипт от dab00 то, что доктор прописал.
Это локально, а как удаленно можно выкрутиться, запустить все это чудо на удаленной машине?
Это локально, а как удаленно можно выкрутиться, запустить все это чудо на удаленной машине?
Копируете srvany и скрипт, который должен запускаться в качестве службы в шару на удаленном компе, подключаетесь к wmi удаленного компа: или "winmgmts:\\" & ИмяКомпа, или от имени пользователя - через SWbemLocator, далее по тексту.
dab00, а можно пример запуска приложения от имени учетки пользователя с помощью SWbemLocator?
Хочу стартовать "gpupdate.exe /force" от имени пользователя на удаленной машине, знаю только способ с созданием одноразового задания в шедулере машины.
этож пипец как набрать help
dab00 Предоставленный вами скрипт не работает,
Const scrFileName = "Speed_Met.vbs"
Const ServiceName = "SpeedCP"
положил в корень диска с, своей же машины ваш скрипт, туда же положил скрипт который нужно запускать Speed_Met.vbs от имени сервиса и там же srvany.exe. После запуска вашего скрипта ошибка: "Не удалось создать службу SpeedCP", сообщение из этой части кода:
If objOutParam.ReturnValue <> 0 Then
MsgBox "Не удалось создать службу " & ServiceNameСкрипт предоставляется "как есть"
. Может прав не хватает?
Права самые самые
.
а что команду sc уже отменили ?
А у меня другой вопросец появилсо ![]()
Мне нужно сервис запустить от имени локального админа, для этого в параметры создания сервиса добавил
objInParam.StartName = ".\locadmlogin"
objInParam.StartPassword = "locadmpassword"Но ругаеться ошибкой "Не возможно создать службу" ![]()
Попробовал, работает... Попробуйте явно прописать путь sPathName и sParamName.
Как вариант используйте совет уважаемого smaharbA - cs /?
smaharbA советовал sc.exe
.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться