Войти

Показать полную графическую версию : Службы не запускаются стандартным скриптом VBS


Той Серью
29-09-2017, 10:06
Здравствуйте всем!
Стоит задача запуска службы (в частности, хамач) из скрипта.
Нашел в инете методы запуска, но чето никакой не срабатывает.
Запример, такой скрипт (добавил только MsgBox для контроля найденных служб)

'*******************************************************************
' Имя: StartStoppedServices.vbs
' Язык: VBScript
' Описание: Запуск остановленных служб
'*******************************************************************
Option Explicit

' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim objWMIService ' Объект SWbemServices
Dim colServices ' Коллекция экземпляров класса WMI
Dim objService ' Элемент коллекции
Dim strResult ' Результирующая строка
Dim WshShell ' Объект WshShell
Dim Res

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"

' Подключаемся к пространству имен WMI
Set objWMIService = GetObject("WinMgmts:\\" & _
strComputer & "\" & strNamespace)
' Формируем коллекцию остановленных служб
Set colServices = objWMIService.ExecQuery _
("SELECT * FROM Win32_Service WHERE State = 'Stopped' and StartMode = " _
& "'Auto'")

' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

' Запрос на запуск служб
Res = WshShell.Popup("Start all services?",0, _
"Работа со службами Windows",vbQuestion+vbYesNo)
If Res=vbYes Then
' Запускаем каждую остановленную службу
For Each objService In colServices
MsgBox objService.Name
objService.StartService()
Next
WScript.Echo "All services has been running"
End If

Этот способ тоже не работает

Sub StartOrStopService(Action, ServiceName)
Dim qry
MsgBox "Search services"
Set wmi = GetObject("winmgmts://./root/cimv2")
Wscript.Echo "Trying to " & Action & " service: " & ServiceName
qry = "SELECT * FROM Win32_Service WHERE Name='" & ServiceName & "'"
For Each s In wmi.ExecQuery(qry)
MsgBox s
MsgBox s.Name
MsgBox ServiceNam
Next
End Sub

Call StartOrStopService(start, "hamachi-2.exe") 'Пришлось взять в кавычки, т.к. скрипт ругается на -2
Call StartOrStopService(start, Hamachi2Svc)

(здесь, похоже, служба не найдена)

В итоге ни одна из этих служб никакими скриптами не запущена.
Получается запустить только через net start Hamachi2Svc в CMD от администратора
Чего не хватает для счастья решения задачи (кроме терпения и компетентности?

Iska
29-09-2017, 11:04
For Each objService In colServices
MsgBox objService.Name
objService.StartService()
Next
WScript.Echo "All services has been running"

Неназванный автор забыл самую малость — проверять значение, возвращаемое методом «.StartService()», и только на основании этого делать какие-то выводы об успешности запуска каждой службы. Нет, он смело пишет: «All services has been running». Теперь к Вашей службе: она хоть перечисляется в отобранном по:
WHERE State = 'Stopped' and StartMode = 'Auto'"
списке?

Этот способ тоже не работает »
'Пришлось взять в кавычки, т.к. скрипт ругается на -2 »
Возьмите в кавычки ещё и «Hamachi2Svc» в:
Call StartOrStopService(start, "Hamachi2Svc")
и используйте в каждом скрипте VBScript команду «Option Explicit», дабы не делать подобных ошибок. Пытаться указывать имя исполняемого файла в качестве имени службы («hamachi-2.exe») смысла нет.

Той Серью
04-10-2017, 14:49
Спасибо.
Только сейчас добрался до этой темы. Служба не запускается. В комментариях то, что сообщается по ходу выполнения скрипта
Option Explicit

Dim start , ServiceName, wmi, s
Sub StartOrStopService(Action, ServiceName)
Dim qry
MsgBox "Search services"
Set wmi = GetObject("winmgmts://./root/cimv2")
Wscript.Echo "Trying to " & Action & " service: " & ServiceName 'Появляется сообщение Trying to start service: Hamachi2Svc
Wscript.Echo qry ' Появляется пустое сообщение
qry = "SELECT * FROM Win32_Service WHERE Name='" & ServiceName & "'"
For Each s In wmi.ExecQuery(qry)
'Wscript.Echo s ' Если включить эту строку, то ошибка "несоответствие типов"
MsgBox ServiceName 'Появляется сообщение Hamachi2Svc
Next
End Sub

Call StartOrStopService(start, "Hamachi2Svc")

В чем дело, не пойму. Что еще можно предпринять?

Той Серью
04-10-2017, 15:39
Я думаю, что дело в правах на запуск. А запустить скрипт VBS от администратора как?

Iska
04-10-2017, 15:39
В чем дело, не пойму. »
В том, что Вы передаёте процедуре StartOrStopService() пустое значение в аргументе Action.

Сдаётся мне, что этого:
WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").Get("Win32_Service.Name='Hamachi2Svc'").StartService
Вам будет достаточно для запуска службы, если имя «Hamachi2Svc» — правильное.




© OSzone.net 2001-2012