0

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

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

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

4

1 回答 1

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来做同样的事情。

于 2009-01-27T15:24:04.513 回答