Остановка службы и ожидание в VBScript - PullRequest
4 голосов
/ 21 мая 2010

Как я могу остановить службу и подождать, пока она остановится в vbscript?

Пока у меня есть это:

For Each objService in colServiceList
    If objService.DisplayName = "<my display name>" Then
        objService.StopService()
    End If
Next

Googling обнаружил предложение использовать objService.WaitForStatus( ServiceControllerStatus.Stopped ), но при запуске, который выдает ошибку «Требуется объект: 'ServiceControllerStatus'".

1 Ответ

4 голосов
/ 22 мая 2010

Метод WaitForStatus не включен в интерфейс WMI Win32_Service. Я думаю, что из класса .NET. Нет эквивалентного метода WMI.

Вам необходимо запросить объект службы WMI, чтобы получить обновленный статус. Затем вы можете выйти из цикла, когда статус изменится на «Остановлен».

Option Explicit

Const MAX_ITER = 30, _
    VERBOSE = True

Dim wmi, is_running, iter
Set wmi = GetObject("winmgmts:")

For iter = 0 To MAX_ITER
    StopService "MSSQL$SQLEXPRESS", is_running
    If Not is_running Then
        Log "Success"
        WScript.Quit 0
    End If

    WScript.Sleep 500
Next

Log "max iterations exceeded; timeout"
WScript.Quit 1

' stop service by name. returns false in is_running if the service is not
' currently running or was not found.
Sub StopService(svc_name, ByRef is_running)
    Dim qsvc, svc

    is_running = False
    Set qsvc = wmi.ExecQuery( _
        "SELECT * FROM Win32_Service " & _
        "WHERE Name = '" & svc_name & "'")
    For Each svc In qsvc
        If svc.Started Then
            is_running = True
            If svc.State = "Running" Then svc.StopService
            Log svc.Name & ": " & svc.Status
        End If
    Next
End Sub

Sub Log(txt)
    If VERBOSE Then WScript.StdErr.WriteLine txt
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...