Home All Groups Group Topic Archive Search About

Monitor Folder Recursively using WMI

Author
20 Nov 2008 9:45 PM
Joe Pang
I am writing a VBscript to monitor a folder for file creation and deletion.
This is a script that I copied from Microsoft Scripting Guy to start with.
It works well except that it only monitors file activities on the root of
the folder.  I would like it to recursively monitor sub-folders as well.

Any suggestions?





strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE " _
        & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
            & "TargetInstance.GroupComponent= " _
                & "'Win32_Directory.Name=""c:\\\\My_Folder""'")

Do While TRUE
    Set objEventObject = colMonitoredEvents.NextEvent()

    Select Case objEventObject.Path_.Class
        Case "__InstanceCreationEvent"
            Wscript.Echo "A new file was just created: " & _
                objEventObject.TargetInstance.PartComponent
        Case "__InstanceDeletionEvent"
            Wscript.Echo "A file was just deleted: " & _
                objEventObject.TargetInstance.PartComponent
    End Select
Loop

Author
20 Nov 2008 10:14 PM
Pegasus (MVP)
Show quote Hide quote
"Joe Pang" <pan***@hotmail.com> wrote in message
news:eiyVOl1SJHA.6000@TK2MSFTNGP02.phx.gbl...
>I am writing a VBscript to monitor a folder for file creation and deletion.
>This is a script that I copied from Microsoft Scripting Guy to start with.
>It works well except that it only monitors file activities on the root of
>the folder.  I would like it to recursively monitor sub-folders as well.
>
> Any suggestions?
>
>
>
>
>
> strComputer = "."
> Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
>
> Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
>    ("SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE " _
>        & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
>            & "TargetInstance.GroupComponent= " _
>                & "'Win32_Directory.Name=""c:\\\\My_Folder""'")
>
> Do While TRUE
>    Set objEventObject = colMonitoredEvents.NextEvent()
>
>    Select Case objEventObject.Path_.Class
>        Case "__InstanceCreationEvent"
>            Wscript.Echo "A new file was just created: " & _
>                objEventObject.TargetInstance.PartComponent
>        Case "__InstanceDeletionEvent"
>            Wscript.Echo "A file was just deleted: " & _
>                objEventObject.TargetInstance.PartComponent
>    End Select
> Loop

AFAIK you have to monitor each folder separately. Furthermore the process is
quite CPU-intensive, like many WMI processes. Have a look at your CPU
loading in the Task Manager. You'll probably see a substantial spike once
every 10 seconds.
Author
21 Nov 2008 3:31 AM
Joe Pang
I came across a few commerical software/shareware that can do the job -
monitor a folder and its sub-folders recursively and executive a program on
changes. I was tempted to buy one but none of them really works well.  That
was why I was tempted to create my own script. Since they can do it, I
thought I could do it using WMI.

I know it will cause some spike on CPU but so far I don't see any
significant impact.




Show quoteHide quote
"Pegasus (MVP)" <I.***@fly.com.oz> wrote in message
news:uir4Q11SJHA.408@TK2MSFTNGP02.phx.gbl...
>
> "Joe Pang" <pan***@hotmail.com> wrote in message
> news:eiyVOl1SJHA.6000@TK2MSFTNGP02.phx.gbl...
>>I am writing a VBscript to monitor a folder for file creation and
>>deletion. This is a script that I copied from Microsoft Scripting Guy to
>>start with. It works well except that it only monitors file activities on
>>the root of the folder.  I would like it to recursively monitor
>>sub-folders as well.
>>
>> Any suggestions?
>>
>>
>>
>>
>>
>> strComputer = "."
>> Set objWMIService = GetObject("winmgmts:\\" & strComputer &
>> "\root\cimv2")
>>
>> Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
>>    ("SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE " _
>>        & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
>>            & "TargetInstance.GroupComponent= " _
>>                & "'Win32_Directory.Name=""c:\\\\My_Folder""'")
>>
>> Do While TRUE
>>    Set objEventObject = colMonitoredEvents.NextEvent()
>>
>>    Select Case objEventObject.Path_.Class
>>        Case "__InstanceCreationEvent"
>>            Wscript.Echo "A new file was just created: " & _
>>                objEventObject.TargetInstance.PartComponent
>>        Case "__InstanceDeletionEvent"
>>            Wscript.Echo "A file was just deleted: " & _
>>                objEventObject.TargetInstance.PartComponent
>>    End Select
>> Loop
>
> AFAIK you have to monitor each folder separately. Furthermore the process
> is quite CPU-intensive, like many WMI processes. Have a look at your CPU
> loading in the Task Manager. You'll probably see a substantial spike once
> every 10 seconds.
>