0

我正在学习文件系统监控以加快我的邮件服务器的第三和第四次备份。我有一个很好的 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。
驱动器 D 是可移动 USB 驱动器。

我是否更改了系统驱动器上的某些设置以阻止其工作?
或者查询返回的结果太多?

我已经搜索了几个小时。任何见解将不胜感激。

4

1 回答 1

3

这是因为当您LIKE在带有CIM_DataFile类的 WQL 语句中使用运算符时,WMI 会扫描整个驱动器以找到匹配项,现在由于您的 USB 驱动器具有更小(和简单)的树形文件夹结构,WMI 可以返回结果更快速。但是当您使用 C 驱动器时,WMI 仍在运行查询,直到找到所有匹配项。所以建议不要将 LIKE 运算符与 一起使用CIM_DataFile,而应=像这样使用运算符:

Select * From __InstanceOperationEvent Within 1 Where TargetInstance ISA 'CIM_DataFile' And ((TargetInstance.Drive='c:' And TargetInstance.Path = '\\sc\\'))

PD:如果您使用LIKE运算符是因为您希望监控多个文件夹中的更改,那么这是不可能的,相反您必须为每个文件夹使用一个 WQL 和事件观察器。

于 2012-10-24T02:55:29.017 回答