需要VB脚本来检查服务是否存在

时间:2013-10-25 09:37:09

标签: vbscript

我想编写一个VBS脚本,用于检查是否在本地安装/存在特定服务。

如果没有安装/存在,脚本将显示消息(任何文本)并禁用网络接口,即NIC。

如果服务存在且正在运行,则不执行任何操作。退出。

如果服务存在但未运行,则相同的操作,脚本将显示消息(任何文本)并禁用网络接口,即NIC。

我有下面给出的代码,如果一个服务停止但它不是 -

,它会显示一条消息
  1. 检查服务是否存在
  2. 禁用NIC

    strComputer = "."
    Set objWMIService = Getobject("winmgmts:"_
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colRunningServices = onjWMIService.ExecQuery _
        ("select State from Win32_Service where Name = 'dhcp'")
    
    For Each objService in colRunningServices
        If objService.State <> "Running" Then
            errReturn = msgbox ("Stopped")
        End If
    Next
    
  3. 请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:0)

要了解服务是否已安装,请检查colRunningServices.Count。如果没有服务匹配wmi查询,它将为0。

要禁用NIC,请使用wmi查询SELECT * FROM Win32_NetworkAdapter,迭代de返回的NIC集合,找到您感兴趣的NIC并使用其禁用/启用方法。但只有在操作系统是Vista或更高版本时才能使用此功能。

答案 1 :(得分:0)

它看起来像这样但我无法测试这个!

Option Explicit

Const TITLE = "Title"
Const SERVICE = "dhcp"
Dim wmi
Dim svcs,svc

Set wmi = GetObject("winmgmts:\\.\root\cimv2")
Set svcs = wmi.ExecQuery("Select * from Win32_Service where Name = '" & SERVICE & "'")

If svcs.Count = 0 Then
  Call MsgBox(SERVICE & " service does not exist",vbCritical,TITLE)
  Call disableNIC(wmi)
Else
  For Each svc In svcs
    If svc.State <> "Running" Then
      Call MsgBox(SERVICE & " service is not running",vbCritical,TITLE)
      Call disableNIC(wmi)
    End If
  Next
End If

Set wmi = Nothing
WScript.Quit

Sub disableNIC(ByRef wmi)
  Dim nics,nic
  Set nics = wmi.ExecQuery("Select * from Win32_NetworkAdapter")
  For Each nic In nics
    nic.Disable
  Next
End Sub

请注意这会禁用每个NIC。如果您要指定一个,则必须在where中添加disableNIC子句。另外我想你必须以管理员身份运行它。

虽然看起来像是一件奇怪的事情......