Метод 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