Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Службы не запускаются стандартным скриптом VBS (http://forum.oszone.net/showthread.php?t=330149)

Той Серью 29-09-2017 10:06 2767521

Службы не запускаются стандартным скриптом VBS
 
Здравствуйте всем!
Стоит задача запуска службы (в частности, хамач) из скрипта.
Нашел в инете методы запуска, но чето никакой не срабатывает.
Запример, такой скрипт (добавил только 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 2767527

Код:

  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 2768404

Спасибо.
Только сейчас добрался до этой темы. Служба не запускается. В комментариях то, что сообщается по ходу выполнения скрипта
Код:

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 2768414

Я думаю, что дело в правах на запуск. А запустить скрипт VBS от администратора как?

Iska 04-10-2017 15:39 2768415

Цитата:

Цитата Той Серью
В чем дело, не пойму. »

В том, что Вы передаёте процедуре StartOrStopService() пустое значение в аргументе Action.

Сдаётся мне, что этого:
Код:

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


Время: 03:04.

Время: 03:04.
© OSzone.net 2001-