Using an Asynchronous Query to Enumerate All the Files on a Computer

Microsoft® Windows® 2000 Scripting Guide

microsoft windows 2000 scripting guide

« Previous | Next »   

The script for enumerating all the files on a computer (as shown in Listing 11.19) works as long as there is sufficient memory to maintain a list of all the files on a computer. For example, on a Windows 2000 based computer with 128 MB of RAM and approximately 22,000 files, the enumeration script completed successfully. On a similar computer with approximately 82,000 files, however, the script exhausted available memory and failed.

With a standard query, data retrieval can tie up available memory and slow system performance. If you expect your file query to return a large amount of data, you might find it more expedient to use an asynchronous query, even if you are returning only a subset of files on a computer (for example, a query that returns several thousand .doc files from a file server). With an asynchronous query, objects are retrieved and reported one at a time. This allows the script to proceed with other tasks; equally important, it allows data retrieval to take place in the background, lessening the system load.

Scripting Steps

Listing 11.20 contains a script that uses an asynchronous query to return a list of all the files on a computer. To carry out this task, the script must perform the following steps:

  1. Create a constant named POPOUP_DURATION, and set the value to 120. This ensures that the popup message box remains on screen for 120 seconds, allowing enough time for the asynchronous query to begin returning data.
  2. Create a constant named OK_BUTTON and set the value to 0. This constant is used in constructing the popup message box.
  3. Create an instance of the Wscript Shell object.
  4. Create a variable to specify the computer name.
  5. Use a GetObject call to connect to the WMI namespace root\cimv2, and set the impersonation level to "impersonate."
  6. Create an SWbemSink object named SINK_.
  7. Use the ExecQueryAsync method to tie the SWbemSink object to the WQL query "SELECT * FROM CIM_Datafile". This query returns a list of all the files on the computer and sends that list, one file at a time, to the SWbemSink object.
  8. As each file is returned to the SWbemSinkObject, display the file name.

Listing 11.20   Using an Asynchronous Query to Enumerate All the Files on a Computer

1 2 3 4 5 6 7 8 9 10 11 12 13 
Const POPUP_DURATION = 120 Const OK_BUTTON = 0 Set objWSHShell = Wscript.CreateObject("Wscript.Shell") strComputer = "." Set objWMIService = GetObject("winmgmts:" _     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objSink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_") objWMIService.ExecQueryAsync objSink, "SELECT * FROM CIM_DataFile" objPopup = objWshShell.Popup("Starting event retrieval", _     POPUP_DURATION, "Event Retrieval", OK_BUTTON) Sub SINK_OnObjectReady(objEvent, objAsyncContext)     Wscript.Echo objEvent.Name End Sub

send us your feedback Send us your feedback « Previous | Next »   


Microsoft Windows 2000 Scripting Guide(c) Automating System Administration 2003
Microsoft Windows 2000 Scripting Guide(c) Automating System Administration 2003
ISBN: N/A
EAN: N/A
Year: 2004
Pages: 635

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net