' Filename..: scanFiles.vbs
' Author....: David M. Stein aka Skatterbrainz aka Scriptzilla aka goofy
' Contact...: ds0934 (at) gmail (dot) com
' Date......: 02/14/2011
' Purpose...: generate file scan report using Windows Search queries
'****************************************************************
' COPYRIGHT (C) 2011 David M. Stein - All Rights Reserved.
' No portion of this software code may be reproduced, shared,
' transmitted, by any means, electronic or otherwise, for any
' purposes whatsoever, without the explicit prior written consent
' of the author.
'****************************************************************
' DESCRIPTION
'
' This script invokes the built-in Windows Desktop Search service
' to query the local index for files that contain specific string
' phrases. The string phrases are defined in an external text
' file which allows for customization of phrases as needed.
' The output is echoed to the display screen unless redirected
' to a log file. The associated .cmd file does just that. It is
' used to execute this script, and redirect the output to a log
' file which is saved to a central folder (network server share)
'****************************************************************
Option Explicit
Const verbose = False
'----------------------------------------------------------------
' comment: DO NOT CHANGE ANY CODE BELOW THIS POINT !!!
' comment: ...or ye shall perish in the land of stupidity
'----------------------------------------------------------------
echo "info: script initialized " & Now
Const ForReading = 1
Const ForWriting = 2
Dim objConnection, objRecordset, query, scriptPath, inputFile
Dim objFSO, objFile, strLine, searchList, itemCount : itemCount = 0
Dim filePath, phrase
Set objFSO = CreateObject("Scripting.FileSystemObject")
' comment: determine self-referential path location
scriptPath = Replace(wscript.ScriptFullName, "\" & wscript.ScriptName, "")
inputFile = "searchlist.txt"
' comment: determine input search list file location
filePath = scriptPath & "\" & inputFile
On Error Resume Next
echo "info: searching for searchlist.txt input file..."
If objFSO.FileExists(filePath) Then
echo "info: reading search values..."
Set objFile = objFSO.OpenTextFile(filePath, ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.Readline
If Left(strLine,1) <> ";" Then
If searchList <> "" Then
searchList = searchList & vbTab & strLine
Else
searchList = strLine
End If
itemCount = itemCount + 1
End If
Loop
objFile.Close
End If
echo "info: " & itemCount & " phrases were queued"
'----------------------------------------------------------------
echo "info: initializing window search interface..."
Set objConnection = CreateObject("ADODB.Connection")
echo "info: opening windows search data connection..."
objConnection.Open "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';"
If err.Number <> 0 Then
echo "fail: connection-open failure [" & _
err.Number & ":" & err.Description & "]"
wscript.quit(2)
End If
echo "info: beginning windows search scan process..."
For each phrase in Split(searchList, vbTab)
wscript.echo "PHRASE: " & phrase
' comment: define search query expression to identify matching files
query = "SELECT System.FileName, System.ItemPathDisplay, " & _
"System.DateCreated, System.DateModified " & _
"FROM SYSTEMINDEX WHERE Contains(System.FileName, '" & _
Chr(34) & phrase & Chr(34) & "')" & _
" OR Contains('" & Chr(34) & phrase & Chr(34) & "')"
' comment: open connection to service and submit query request
Set objRecordSet = CreateObject("ADODB.Recordset")
objRecordSet.Open query, objConnection
If err.Number <> 0 Then
echo "fail: recordset-open failure [" & _
err.Number & ":" & err.Description & "]"
objConnection.Close
Set objConnection = Nothing
wscript.quit(3)
End If
' comment: if results are not empty, iterate the dataset rows
If Not (objRecordset.BOF and objRecordset.EOF) Then
objRecordSet.MoveFirst
echo "info: iterating recordset results..."
Do Until objRecordset.EOF
wscript.echo "MATCH: " & _
objRecordset.Fields.Item("System.ItemPathDisplay").value & _
vbTab & objRecordset.Fields.Item("System.DateCreated").value & _
vbTab & objRecordset.Fields.Item("System.DateModified").value
objRecordset.MoveNext
Loop
wscript.echo
Else
echo "info: no matching records were found"
End If
objRecordset.Close
Set objRecordset = Nothing
Next
' comment: close connection to service
objConnection.Close
Set objConnection = Nothing
echo "info: processing completed " & Now
'----------------------------------------------------------------
' function: verbose printing
'----------------------------------------------------------------
Sub Echo(s)
If verbose = True Then
wscript.echo s
End If
End Sub
EXAMPLE of searchlist.txt
; disable lines by inserting a semi-colon in front of them
This is a phrase to search for
this is another phrase
phrases are case insensitive
No comments:
Post a Comment