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#), чтобы сделать то же самое.