用于监视文件更改的WQL查询

时间:2009-01-27 14:19:48

标签: wmi wmi-query

我需要一些帮助,因为我是WMI Events的新手。 我正在尝试编写WQL查询来监视文件中发生的任何更改 放在特定文件夹中(C:\ Data) 我提出了以下查询,但WMIEvent从未发生过。

SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA "CIM_DataFile" AND TargetInstance.Drive="C:" AND TargetInstance.Path="\\Data"

请您能否向我提供任何反馈,我做错了什么,或者您是否知道查询文件更改的其他方式我也会感激:)

1 个答案:

答案 0 :(得分:0)

我认为问题在于您没有将查询中的\字符加倍。 \是WQL中的保留字符,因此您必须使用\来代替。下面是我使用的VBScipt,并且能够正常工作。我希望这有用!

Main

Sub Main()

    WScript.Echo "Initializing WMI..."

    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & _
        strComputer & "\root\CIMV2") 
    Set EventSink = WScript.CreateObject( _
        "WbemScripting.SWbemSink","SINK_")

    WScript.Echo "WMI Initialized."

    query = "SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA 'CIM_DataFile' AND TargetInstance.Path='\\data\\'"

    WScript.Echo "Executing Query..."
    set results = objWMIservice.ExecNotificationQuery(query)
    WScript.Echo "Query Returned."

    Do
        WScript.Echo "Waiting on events..."
        Set evt = results.NextEvent
        WScript.Echo "Modified Path:" + evt.TargetInstance.Path
        WScript.Echo "Modified Path:" + evt.TargetInstance.Name
    Loop
End Sub

您可能也有兴趣通过某种.NET语言(例如VB.NET或C#)来使用FileSystemWatcher来做同样的事情。