2013-10-25 64 views
-3

我想写一个VBS脚本如果安装特定的服务/存在或不当地将检查。需要一个VB脚本,以检查是否存在服务

如果未安装/存在,脚本将显示消息(任何文本)和禁用网络接口即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 
    

请帮忙。提前致谢。

+0

为什么标记为“VB.NET”? – Tomalak

+0

Tomalak,我已经删除了VB.net标记。谢谢 ! –

+2

请退后一步描述您尝试解决的实际问题,而不是您认为的解决方案。你想通过这样做来达到什么目的? –

回答

0

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

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

+0

感谢MC ND提供的信息。脚本编写不太好。我知道我问的很多,而且很贪婪,但是你能否以准备使用代码的形式提供给我? –

+0

我无法为您提供可随时使用的代码。虽然服务检测很直接,但NIC是不同的野兽。我不知道你的网卡配置,启用/禁用现有网卡,NICS名称,......有很多细节需要考虑。对不起,但你应该自己做,或要求具体的任务。 –

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。如果您想指定一个,您必须在disableNIC中添加where子句。另外我想你将不得不以管理员身份运行。

虽然似乎想要做一件奇怪的事情...

相关问题