找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18237|回复: 2

[问题求助] [已解决] WQL查询语句 及 WMI路径写法的问题

[复制链接]
发表于 2013-1-22 19:00:56 | 显示全部楼层 |阅读模式
本帖最后由 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
比如:
  1. set objprocesses=getobject("winmgmts:\\.\root\cimv2:win32_process")
  2. for each objprocess in objprocesses
  3.     wscript.echo objprocess.name
  4. next
复制代码
这个路径 winmgmts:\\.\root\cimv2:win32_process 应该没问题吧,但为什么执行不成功呢?

评分

参与人数 1PB +2 收起 理由
batman + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-1-22 20:29:00 | 显示全部楼层
本帖最后由 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是其下的用来访问进程实例的类,正确的代码如下:

  1. Dim objWMI, objItems, objItem
  2. Set objWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
  3. Set objItems = objWMI.ExecQuery("Select * From Win32_Process")
  4. For Each objItem In objItems
  5.   WScript.Echo objItem.Name
  6. Next
  7. Set objWMI = Nothing
复制代码
 楼主| 发表于 2013-1-22 23:07:32 | 显示全部楼层
呵呵,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这么详细的回复啊!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:07 , Processed in 0.011198 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表