我想编写一个VBS脚本,用于检查是否在本地安装/存在特定服务。
如果没有安装/存在,脚本将显示消息(任何文本)并禁用网络接口,即NIC。
如果服务存在且正在运行,则不执行任何操作。退出。
如果服务存在但未运行,则相同的操作,脚本将显示消息(任何文本)并禁用网络接口,即NIC。
我有下面给出的代码,如果一个服务停止但它不是 -
,它会显示一条消息禁用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
请帮忙。提前谢谢。
答案 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
子句。另外我想你必须以管理员身份运行它。
虽然看起来像是一件奇怪的事情......