0

私は WMI イベントを初めて使用するので、助けが必要です。特定のフォルダー (C:\Data) に配置されたファイルで発生した変更を監視するための WQL クエリを作成しようとしています。次のクエリを思いつきましたが、WMIEvent は発生しません。

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

私が間違っていること、またはファイルの変更を照会する他の方法を知っている場合は、フィードバックをお寄せください:)

4

1 に答える 1

0

問題は、クエリで \ 文字を 2 倍にしていないことだと思います。\ は 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 に答える