不好意思,本人虽然是科班出生,但是对编程实在是没多大兴趣,所以现在编程对我来说很模糊!下面是我在MS上看到的一段!我是个十足的拿来主义,可是不管我用他的那段代码怎么设置wmi筛选器都不成功!
如何在每次拔掉网线时都能收到通知?问:您好,脚本专家!有没有什么方法让我在每次计算机上的网线被拔掉时都能收到通知?
-- DD
答:您好,DD。很多人在成长过程中都有过这样的经历:您的奶奶或姨妈或某个亲戚,住在带有一个大阁楼的房子里,这个阁楼里塞满了东西。不可否认,大多数时间里,当您在阁楼里徘徊时,不知道该找什么,但是您常常会很偶然地找到一些很酷很有用的东西。每次造访阁楼都像是一次寻宝旅行,您永远都不知道会在那里找到什么。
在 WMI 中,“root\wmi”命名空间就相当于奶奶的阁楼。这里有相当多的资料 – 在 Windows XP 测试计算机上有 374 个类 – 但是大多数类不是没有实现就是不返回任何数据。不过,您时不时地会发现一个很有用的类,比如每次网络连接丢失时都向您发出通知的类。研究这个命名空间就像是寻宝一样。
事实证明,“MSNdis_StatusMediaDisconnect”类 – 一个 WMI 事件类 – 可以监视计算机并在每次网络连接丢失时(不论是因为拔掉了网线还是因为其他的原因)向您发出通知。还是像往常那样,我们先向您展示脚本,然后再说明它是如何工作的:
strComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\wmi")Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ ("Select * from MSNdis_StatusMediaDisconnect") Do While True Set strLatestEvent = colMonitoredEvents.NextEvent Wscript.Echo "A network connection has been lost:" WScript.Echo strLatestEvent.InstanceName, Now Wscript.Echo Loop如果您多少有点儿使用 WMI 事件脚本的经验,此脚本看起来会很熟悉。(如果您没有使用 WMI 事件脚本的经验,则您可能需要看一看
Scripting Week 2 webcast 网络广播。)首先,我们连接到 WMI 服务;请注意,我们应连接到 root\wmi 而不是 root\cimv2。然后,我们使用“ExecNotificationQuery”申请在每次创建“MSNdis_StatusMediaDisconnect”类的新实例时都收到通知。您可能已经猜到了,每次网络连接丢失时都会创建此类的新实例。
然后,我们设置一个无限循环;通过设计,此脚本将连续不断地监视计算机上 MSNdis_StatusMediaDisconnect 类的新实例。(实际上,使脚本停止监视的唯一方法就是终止该脚本或该脚本过程。)然后此脚本暂停在以下这行代码上,等待下一个网络断开事件:
Set strLatestEvent = colMonitoredEvents.NextEvent那么,如果我们拔开网线并将计算机从网络中断开,会发生什么事情呢?在这种情况下,将发生一个网络断开事件,将创建 MSNdis_StatusMediaDisconnect 类的新实例,且该脚本将发布与以下类似的通知:
A network connection has been lost:Microsoft Wireless Notebook Adapter MN-720 3/172005 8:28:34 AM很酷吧?然后该脚本继续循环并等待下一个网络断开的发生。如果再次发生这样的网络断开事件,便发布另一个通知。
| 附注。当然,并不局限于将您的消息回显到屏幕。您可以让您的脚本在发生网络断开时执行任何操作;我们只是想将情况简单化。
|
顺便提一句,有一个相似的类“MSNdis_StatusMediaConnect”,该类可在每次网络连接完成后向您发出通知。以下就是用于完成此操作的示例脚本:
strComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\wmi")Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ ("Select * from MSNdis_StatusMediaConnect") Do While True Set strLatestEvent = colMonitoredEvents.NextEvent Wscript.Echo "A network connection has been made:" WScript.Echo strLatestEvent.InstanceName, Now Wscript.Echo Loop遗憾的是,我们不知道将这两个脚本合成一个脚本(即一个在网络连接时和网络断开时都会对您进行通知的脚本)的简便方法。虽然目前至少有一种方法可以做到这一点,但是该方法会带来一些安全问题,所以我们不推荐使用它。那么,若要同时监视这两种事件,您暂时需要分别运行两个独立的脚本。但是我们将会继续在整个 WMI 阁楼里翻箱倒柜;谁知道我们还能在那里找到别的什么东西呢。
就是这段,每次右键“WMI 筛选器”---新建---添加---名称空间不管我是选择的“root\WMI”还是自己设置的“root\wmi” ,然后粘贴代码后“确定”,然后在点击“保存”的时候他都提示代码有错误..............