-3

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

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

如果服务存在且正在运行,则无操作。就退出吧。

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

我有下面给出的代码,它显示一条消息,以防一项服务停止但它不是 -

  1. 检查服务是否存在
  2. 禁用网卡

    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
    

请帮忙。提前致谢。

4

2 回答 2

0

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

要禁用网卡,请使用 wmi 查询SELECT * FROM Win32_NetworkAdapter,迭代返回的网卡集合,找到您感兴趣的网卡并使用它的禁用/启用方法。但这仅在操作系统是 Vista 或更高版本时才有效。

于 2013-10-25T11:14:47.537 回答
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。如果要指定一个,则必须wheredisableNIC. 另外我想你必须以管理员身份运行它。

不过,这似乎是一件奇怪的事情……

于 2013-10-25T12:57:29.930 回答