我正在学习文件系统监控,以加快我的邮件服务器的第3和第4次备份。我有一个很好的VB脚本在驱动器D上完美运行,但是当我查询驱动器C的更改时,如果我使用通配符,则不会返回任何内容。
以下是我的疑问:
这适用于c:\ sc,但不会返回子文件夹更改:
Select * From __InstanceOperationEvent Within 10 Where TargetInstance Isa 'CIM_DataFile' And ((TargetInstance.Drive='c:' And TargetInstance.Path = '\\sc\\'))
这适用于d:\ sc,并确实返回子文件夹更改:
Select * From __InstanceOperationEvent Within 10 Where TargetInstance Isa 'CIM_DataFile' And ((TargetInstance.Drive='d:' And TargetInstance.Path LIKE '\\sc\\%'))
这个没有任何变化。不返回任何错误消息,脚本继续运行:
Select * From __InstanceOperationEvent Within 10 Where TargetInstance Isa 'CIM_DataFile' And ((TargetInstance.Drive='c:' And TargetInstance.Path LIKE '\\sc\\%'))
双括号是我可以添加与“OR”连接的类似查询。
我的系统驱动器是驱动器C.
Drive D是可移动的USB驱动器。
我是否在系统驱动器上更改了一些阻止其工作的设置?
或者查询返回的结果太多了?
我一直在搜索这个问题几个小时。任何见解将不胜感激。
答案 0 :(得分:3)
这是因为当您在具有CIM_DataFile
类的WQL语句中使用LIKE
运算符时,WMI会扫描整个驱动器以找到匹配项,现在因为您的USB驱动器有一个更小的(和简单的)树文件夹结构WMI可以更快地返回结果。但是当您使用C驱动器时,WMI仍然运行查询,直到找到所有匹配项。因此建议不要将{LIK运算符与CIM_DataFile
一起使用,而只需使用=
运算符,如下所示:
Select * From __InstanceOperationEvent Within 1 Where TargetInstance ISA 'CIM_DataFile' And ((TargetInstance.Drive='c:' And TargetInstance.Path = '\\sc\\'))
P.D:如果您正在使用LIKE
运算符,因为您希望在多个文件夹中更改监视器,则无法进行此操作,而是必须为每个文件夹使用一个WQL和事件监视器。