WMI 事件的神奇功能,它使您可以编写脚本来监视所关心的事情(比如:文件被添加到文件夹中),然后在发生此类事件时,采取特定的行动。同时,这里有一个脚本可以监视 C:/Scripts 文件夹。只要有文件被添加到这个文件夹中,该脚本就会通过回显新文件的名称做出回应:
strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!//" & _ strComputer & "/root/cimv2") Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ ("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " _ & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _ & "TargetInstance.GroupComponent= " _ & "'Win32_Directory.Name=""c:////scripts""'") Do Set objLatestEvent = colMonitoredEvents.NextEvent Wscript.Echo objLatestEvent.TargetInstance.PartComponent Loop
这里所涉及的内容太多,我们无法详细剖析该脚本,但是我们所要找的就是 __InstanceCreationEvent 类别的实例;只要计算机上创建了新的受控对象(即 WMI 所了解的对象),就会自动创建该类别的实例。虽然该查询有些复杂,但可以简单归结为:只要有新的项目出现在 C:/Scripts 里,我们就想得到通知。(请注意,C:////Scripts 不是打印错误;这里必须有四个斜杠。)我们还需要提一下,这类 WMI 脚本采用“轮询”的工作方式;它将定期检查是否有新的文件被添加到该文件夹中。在该示例中,我们每 10 秒检查一次(就是 WITHIN 10 所表示的),来确定该文件夹中是否有新的文件。如果这一频率过快或过慢,可以随意更改该值。但是,请记住两点。其一,如果轮询地过于频繁(比方说每秒执行一次),那么脚本就会一直在运行,从而在理论上会耗尽系统资源。喾矗绻弥瞪柚玫墓螅赡芑岽砉恍┬挛募偕柙诼盅奔涞嚼粗罢庑┪募捅惶砑硬⑺嬷簧境@纾偕枘慕疟久?5 分钟检查一次新文件。如果您添加了 100 个新文件,并在 3 分钟后将它们统统删除,那么该脚本将永远无法知道那些文件曾被添加到该文件夹中。这是因为这类脚本的工作原理是:将文件夹中的当前文件与脚本最后一次检查的文件夹中的文件进行比较。尝试采用不同的轮询时间间隔,看看哪个最合适。正如我们所注意到的,该脚本将回显任何被添加到 C:/Scripts 的新文件的名称。如果想在文件被添加到文件夹时做一些更有趣的事情,该怎么办呢?没问题;只要使用您想在检查到新文件时执行的代码替换这行代码就行了:Wscript.Echo objLatestEvent.TargetInstance.PartComponent顺便说一下,您想在文件从 C:/Scripts 中删除时得到通知吗?这很简单;只要针对 __InstanceDeletionEvent 类别的新实例监视 C:/Scripts 就行了:strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!//" & _ strComputer & "/root/cimv2") Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ ("SELECT * FROM __InstanceDeletionEvent WITHIN 10 WHERE " _ & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _ & "TargetInstance.GroupComponent= " _ & "'Win32_Directory.Name=""c:////scripts""'") Do Set objLatestEvent = colMonitoredEvents.NextEvent Wscript.Echo objLatestEvent.TargetInstance.PartComponent Loop 【转自世纪安全网 http://www.21safe.com】
|