File 为什么WQL-LIKE操作符不在驱动器c上工作,但在驱动器d上工作良好?

File 为什么WQL-LIKE操作符不在驱动器c上工作,但在驱动器d上工作良好?,file,wmi,monitoring,wildcard,wql,File,Wmi,Monitoring,Wildcard,Wql,我正在学习文件系统监控,以加快邮件服务器的第3次和第4次备份。我有一个很好的VB脚本,它可以在驱动器D上完美地工作,但是当我查询对驱动器C的更改时,如果我使用通配符,则不会返回任何内容 以下是我的疑问: 这对于c:\sc很好,但不会返回子文件夹更改: 从10范围内的uu InstanceOperationEvent中选择*,其中TargetInstance为“CIM_数据文件”和((TargetInstance.Drive='c:'和TargetInstance.Path='\\sc\\'))

我正在学习文件系统监控,以加快邮件服务器的第3次和第4次备份。我有一个很好的VB脚本,它可以在驱动器D上完美地工作,但是当我查询对驱动器C的更改时,如果我使用通配符,则不会返回任何内容

以下是我的疑问:

这对于c:\sc很好,但不会返回子文件夹更改: 从10范围内的uu InstanceOperationEvent中选择*,其中TargetInstance为“CIM_数据文件”和((TargetInstance.Drive='c:'和TargetInstance.Path='\\sc\\'))

这适用于d:\sc,并返回子文件夹更改: 从10以内的uu InstanceOperationEvent中选择*,其中TargetInstance为“CIM_数据文件”和((TargetInstance.Drive='d:'和TargetInstance.Path,如'\\sc\\%'))

这一个根本不返回任何更改。不会返回任何错误消息,脚本将继续运行: 从10内的uu InstanceOperationEvent中选择*,其中TargetInstance为“CIM_数据文件”和((TargetInstance.Drive='c:'和TargetInstance.Path,如'\\sc\\%'))

双括号用于添加与“OR”相关的类似查询

我的系统驱动器是驱动器C。
驱动器D是一个可移动USB驱动器

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


我已经找了几个小时了。任何洞察都将不胜感激。

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

Select * From __InstanceOperationEvent Within 10 Where TargetInstance Isa 'CIM_DataFile' And ((TargetInstance.Drive='c:' And TargetInstance.Path = '\\sc\\'))
p.D:如果您使用
LIKE
操作符是因为您希望监视多个文件夹中的更改,这是不可能的,相反,您必须为每个文件夹使用一个WQL和事件查看器。

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

Select * From __InstanceOperationEvent Within 10 Where TargetInstance Isa 'CIM_DataFile' And ((TargetInstance.Drive='c:' And TargetInstance.Path = '\\sc\\'))
注意:如果您使用
LIKE
操作符是因为您希望监视多个文件夹中的更改,这是不可能的,相反,您必须为每个文件夹使用一个WQL和事件观察程序。

好的,听起来是可行的,但是如果我错了,请纠正我-没有查询驱动器,而是查询事件日志。我上面给出的第二个示例完美地适用于驱动器D:上的文件夹和子文件夹,顺便说一句,驱动器D:上有4个不同服务器的备份,使其既不小也不简单,因此显然可以使用LIKE检索子文件夹更改,对吗?每个文件的创建、删除和更改都会记录到事件日志中,因此我如何在事件日志中查询驱动器c上文件夹及其子文件夹中发生的事件:?c驱动器是典型的Windows安装,D驱动器是3个典型的Windows安装和一个Linux。您所指出的对我来说没有意义,我有很多使用WMI的经验,您描述的行为不符合我在这个主题上的个人经验。不管怎样,为什么要使用
LIKE
操作符?我上面的第二个示例返回文件夹中所有文件以及驱动器D的所有子文件夹的事件。请在您的辅助驱动器上尝试,也许您会得出与我相同的结论-它在某些情况下有效。我已经在WMI测试仪中运行了上面第三个示例中的查询,有趣的是,查询开始了,GUI再也没有回来。很明显,查询会运行,不会完成,也不会超时,也不会引发诸如配额限制或其他错误。不确定为什么它会发生在C上,但不会发生在D上,但它似乎是监视驱动器C的不可行的解决方案。我可以映射所有文件夹并订阅它们的事件,但大约有8000个文件夹需要监视,这似乎太过分了。好吧,听起来是可行的,但如果我错了,请纠正我-没有查询驱动器,而是查询事件日志。我上面给出的第二个示例完美地适用于驱动器D:上的文件夹和子文件夹,顺便说一句,驱动器D:上有4个不同服务器的备份,使其既不小也不简单,因此显然可以使用LIKE检索子文件夹更改,对吗?每个文件的创建、删除和更改都会记录到事件日志中,因此我如何在事件日志中查询驱动器c上文件夹及其子文件夹中发生的事件:?c驱动器是典型的Windows安装,D驱动器是3个典型的Windows安装和一个Linux。您所指出的对我来说没有意义,我有很多使用WMI的经验,您描述的行为不符合我在这个主题上的个人经验。不管怎样,为什么要使用
LIKE
操作符?我上面的第二个示例返回文件夹中所有文件以及驱动器D的所有子文件夹的事件。请在您的辅助驱动器上尝试,也许您会得出与我相同的结论-它在某些情况下有效。我已经在WMI测试仪中运行了上面第三个示例中的查询,有趣的是,查询开始了,GUI再也没有回来。因此,显然,查询会运行,并且不会完成,也不会超时,并且不会引发诸如配额限制或其他错误。不确定为什么它会发生在C上而不会发生在D上,但对于monit来说,这似乎是一个不可行的解决方案 Select * From __InstanceOperationEvent Within 10 Where TargetInstance Isa 'CIM_DataFile' And ((TargetInstance.Drive='c:' And TargetInstance.Path LIKE '\\sc\\%'))
Select * From __InstanceOperationEvent Within 1 Where TargetInstance ISA 'CIM_DataFile' And ((TargetInstance.Drive='c:' And TargetInstance.Path = '\\sc\\'))