2012-10-23 31 views
0

我正在学习文件系统监控,以加快我的邮件服务器的第3次和第4次备份。我有一个漂亮的VB脚本,在驱动器D上完美地工作,但是当我查询驱动器C的更改时,如果使用通配符,则不会返回任何结果。为什么WQL LIKE操作符不能在驱动器c上工作,但在驱动器d上工作正常?

这里是我的查询:

这工作得很好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驱动器。

我改变了我的系统驱动器上的一些设置,以防止这种情况发生?
或者查询返回的结果太多?

我一直在寻找这个几个小时。任何见解将不胜感激。

回答

3

这是因为当您在CIM_DataFile类中使用WQL语句中的LIKE运算符时,WMI扫描整个驱动器以找到匹配项,现在因为USB驱动器具有更小(且简单)的树文件夹结构WMI可以更快地返回结果。但是当您使用C驱动器时,WMI仍然运行查询,直到找到所有匹配项。所以建议是不CIM_DataFile使用LIKE运算符,而不是仅仅使用=运营商,像这样:

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

PD:因为你希望监视多个文件夹中的变化如果您使用的是LIKE运营商,这是不可能,相反,您必须为每个文件夹使用一个WQL和事件观察器。

+0

好吧,听起来可行,但纠正我,如果我错了 - 驱动器不被查询,而是事件日志。上面给出的第二个例子完美地适用于驱动器D:上的文件夹和子文件夹,顺便说一下,它备份了4个不同的服务器,使它既不小也不简单,所以显然可以使用LIKE来检索子文件夹更改,对?每个文件的创建,删除和更改都将记录到事件日志中,那么如何查询事件日志以查找文件夹上发生的事件以及驱动器c上的子文件夹:? – alfadog67

+0

您的c和d驱动器中有多少个文件? – RRUZ

+0

C驱动器是典型的Windows安装,D驱动器是3个典型的Windows安装和一个Linux。 – alfadog67

相关问题