【问题标题】:how to check service state using vbscript?如何使用 vbscript 检查服务状态?
【发布时间】:2014-01-12 11:45:29
【问题描述】:

是否可以使用 vbscript 检查服务状态?我想为每种可能的服务状态提供一个功能: LINK 任何帮助都会很棒。我确实写了一个检查服务是否停止的函数:

Public Function IsServiceStop(ByVal serviceName)
    On Error Resume Next
    Dim objServices, service
    Set oWmiService = GetObject("winmgmts:\\.\root\cimv2")
    Set objServices = oWmiService.ExecQuery("Select * from Win32_Service where Name='" & serviceName & "'")
    For Each service In objServices
        IsServiceStop = (service.Started = False)
        Exit Function
    Next
    IsServiceStop = True
    On Error Goto 0
End Function

【问题讨论】:

  • WMI 本身就是一项服务。它可能不可用。 Windows Management Instrumentation
  • @Azevedo 虽然 WMI 服务可能无法运行是事实,但如果是这种情况,那么根据我的经验,很多东西都不起作用,不值得担心。

标签: service vbscript wmi status wmi-query


【解决方案1】:

如有疑问,请阅读documentation。您需要做的就是检查服务对象的State 属性:

serviceName = "..."

Set wmi = GetObject("winmgmts://./root/cimv2")
state = wmi.Get("Win32_Service.Name='" & serviceName & "'").State
WScript.Echo state

【讨论】:

    【解决方案2】:
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    
    Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name ='" & strServiceName & "'")
    
    For Each objService in colListOfServices
    
       status = objService.State
    
    Next
    
    Reporter.ReportEvent micPass, "startService", "Service status " & status
    

    【讨论】:

      【解决方案3】:
      ' Michael Maher 
      ' 3/10/07 
      ' Checks if services exists and is running 
      
      strComputer = "." 
      Set objWMIService = GetObject("winmgmts:" _ 
      & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
      
      Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name='Messenger'")  
      nItems = colRunningServices.Count  
      
      ' If the collection count is greater than zero the service will exist. 
      
      If nItems > 0  Then 
      
      For Each objItem in colRunningServices 
      
      If objItem.State = "Stopped" Then 
      Wscript.Echo objItem.DisplayName & " Installed/Stopped" 
      ElseIf objItem.State = "Started" Then 
      Wscript.Echo objItem.DisplayName & " Installed/Running" 
      End If 
      Next 
      
      Else 
      Wscript.Echo "Service Not Installed" 
      End If 
      

      这里是source

      【讨论】: