标题: [问题求助] [已解决] WQL查询语句 及 WMI路径写法的问题 [打印本页]
作者: wankoilz 时间: 2013-1-22 19:00 标题: [已解决] WQL查询语句 及 WMI路径写法的问题
本帖最后由 wankoilz 于 2013-1-22 23:13 编辑
问题1
在这里http://demon.tw/programming/vbs-usb-insert-remove-2.html看到demon的一个代码,里面一个查询语句不解,望指点一下:
Select * From __InstanceOperationEvent Within 10 Where TargetInstance isa 'Win32_LogicalDisk'
里面有一个 within 10 请问是什么意思?
问题2
比如:- set objprocesses=getobject("winmgmts:\\.\root\cimv2:win32_process")
- for each objprocess in objprocesses
- wscript.echo objprocess.name
- next
复制代码
这个路径 winmgmts:\\.\root\cimv2:win32_process 应该没问题吧,但为什么执行不成功呢?
作者: batman 时间: 2013-1-22 20:29
本帖最后由 batman 于 2013-1-22 22:43 编辑
因为这个代码所需要达到的目的是监控U盘的插入和移除,所以用到了WMI事件监控的ExecNotificationQuery方法(一般我们使用的是ExecQuery查询方法),使用了这个方法后一旦有了创建、修改和删除WMI事件的发生,系统就会立即发出通知(具体看你用什么样的方式来通知)。而语句中的Within 10所指的是每10秒临控一次,Where TargetInstance isa 'Win32_LogicalDisk'是定义发生创建、修改和删除的事件是Win32_LogicalDisk逻辑磁盘服务发起的。
另外root\cimv2是WMI四类名称空间之一不是路径,它所指向的是WINDOWS管理规范实例空间,而Win32_Process是其下的用来访问进程实例的类,正确的代码如下:- Dim objWMI, objItems, objItem
- Set objWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
- Set objItems = objWMI.ExecQuery("Select * From Win32_Process")
- For Each objItem In objItems
- WScript.Echo objItem.Name
- Next
- Set objWMI = Nothing
复制代码
作者: wankoilz 时间: 2013-1-22 23:07
呵呵,with in 10 原来是每10秒监视一次啊。难怪,我之前还纳闷儿,do loop 循环里面没有一个延迟那不是很耗CPU资源么,
原来这个 with in 就有这个作用了,不错!
Winmgmts:\\.\Root\Cimv2 是命名空间,而win32_process是类,嗯,对头。
我是在百度贴吧看了这篇简明文章(http://tieba.baidu.com/p/197779176)以为可以这么写,
看来 winmgmts:\\.\root\cimv2:win32_process 只是一种概念上的表述而已,我误解成代码中可以这么用了。
感谢batman这么详细的回复啊!!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |