WQL-запрос для мониторинга изменения файла

Мне нужна помощь, так как я новичок в 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 ответ

Я думаю, проблема в том, что вы не удвоили символы \ в вашем запросе. \ является зарезервированным символом в 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

Вам также может быть интересно посмотреть на использование FileSystemWatcher через какой-либо язык.NET (например, VB.NET или C#), чтобы сделать то же самое.

Другие вопросы по тегам