2009-01-27 9 views
0

J'ai besoin d'aide depuis que je suis nouveau à WMI Events. Je suis en train d'écrire une requête WQL pour surveiller les changements qui se produisent dans un fichier qui est placé dans un dossier spécifique (C: \ Data) Je viens avec la requête suivante, mais WMIEvent ne se produit jamais.Requête WQL pour la surveillance du changement de fichier

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

S'il vous plaît pouvez-vous me fournir des commentaires, ce que je fais mal ou si vous connaissez d'autres façon d'interroger les changements de fichiers que je vais l'apprécier aussi :)

+0

J'ai un problème similaire. Je trouve que l'événement se déclenche seulement si je supprime et recréer le fichier. Si je viens de l'écraser ou de le modifier, l'événement ne se déclenchera pas. –

Répondre

0

Je pense que le problème est que vous n'a pas doublé les \ caractères dans votre requête. \ est un caractère réservé dans WQL, vous devez donc utiliser \ à la place. Voici le VBScipt que j'ai utilisé et j'ai pu travailler. J'espère que ceci est utile!

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 

Vous pourriez aussi être intéressé à regarder en utilisant le FileSystemWatcher via un langage .NET (comme VB.NET ou C#) pour faire la même chose.

Questions connexes