WQL-запрос для мониторинга изменения файла - PullRequest
0 голосов
/ 27 января 2009

Мне нужна помощь, так как я новичок в 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 голосов
/ 27 января 2009

Мне кажется, проблема в том, что вы не удвоили \ символов в своем запросе. \ является зарезервированным символом в 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 #) для того же.

...