Avatar of andressk
andressk
Flag for Colombia

asked on 

VB Script that checks for a string on a log file

Hello,
I´m currently working with this script that search for a string in a log and alarms if it finds the string.
It is working fine, but for some logs, I see that it´s duplicating the alarm, showing the same event every time the script runs and I´d like to check if there is sometihing that I have to change to make the script only alarms once when it finds the string.

Thank you
strFileName = Wscript.Arguments.Named("file") 'Get file name from argument
If strFileName = "" Then
    Wscript.Echo "Message: You must specify a File Name like this: /file:""blah.txt"""
    Wscript.Quit(4)
End If

strSearch = Wscript.Arguments.Named("search") 'Get search string form argument
If strSearch = "" Then
    Wscript.Echo "Message: You must specify a string to search for like this: /search:""ERROR"""
    Wscript.Quit(4)
End If

If strFailIf="" Then strFailIf="found" End If
If (strFailIf="found") Then
	strFound=3
	strNotFound=0
ElseIf (strFailIf="notfound" or strFailIf="not found") Then
	strFound=0
	strNotFound=3
Else
	strFound=4
	strNotFound=4
	Wscript.Echo "Message: ERROR, set strFailIf"
    Wscript.Quit(4)
End If	

yyyy = Datepart("yyyy",Date())
yy = Right(yyyy, 2)
m = Datepart("m",Date())
mm = Right("0" & m, 2)
d = Datepart("d",Date())
dd = Right("0" & d, 2)

If (InStr(1,strFileName,"${Date}",1) <> 0) Then
	If (InStr(1,strFileName,"${Date}",1) <> 0 AND strDateFormat <> "") Then
		strDateFormat = replace(strDateFormat, Space(1), " & Space(1) & ")
		strDateFormat = replace(strDateFormat, "_", " & ""_"" & ")
		strDateFormat = replace(strDateFormat, "/", " & ""/"" & ")
		strDateFormat = replace(strDateFormat, "-", " & ""-"" & ")
		strDateFormat = replace(strDateFormat, ".", " & ""."" & ")
		strFileName = Replace(strFileName,"${Date}",eval(strDateFormat),1,-1,1)
	Else 
		Wscript.Echo "Message: Error with ${Date} and strDateFormat. Please review instructions at top of script."
		Wscript.Quit(4)
	End If
End If

strPattern = strSearch

Const ForReading = 1

Set objFSO = CreateObject("Scripting.FileSystemObject")

If Not objFSO.FolderExists("temp") Then
	objFSO.CreateFolder("temp")
End If

PrevLogFile =  "temp\" & strSearch & "-" & mm & "_"  & dd-1 & "_"  & yyyy & ".txt"
If objFSO.FileExists(PrevLogFile) Then
	set objPrevLogFile = objFSO.GetFile(PrevLogFile)
	objPrevLogFile.Delete
End If

PreviousFinds = 0
LogFile = "temp\" & strSearch & "-" & mm & "_"  & dd & "_"  & yyyy & ".txt"
If objFSO.FileExists(LogFile) Then
	Set objLog = objFSO.OpenTextFile(LogFile,1, True)

	
	If objFSO.FileExists(LogFile) Then
	If objFSO.GetFile(LogFile).Size = 0 Then
		Wscript.Echo "Logfile has no content"
		PreviousFinds = 0
	Else
		Set objLog = objFSO.OpenTextFile(LogFile, 1, True)
		PreviousFinds = objLog.ReadAll
		If Not IsNumeric(PreviousFinds) Then
			Wscript.Echo "Contents in logfile not numeric: " & PreviousFinds
			PreviousFinds = 0
		End If
	End if

End If
	
End If

If objFSO.FileExists( strFileName ) Then
  Set objFile = objFSO.GetFile(strFileName)
  If( IsEmpty( objFile ) = True ) Then
      WScript.Echo "Message: OBJECT NOT INITIALIZED"
      WScript.Echo "Statistic: 0"
      WScript.Quit(4)
    End If
     
  else
    WScript.Echo "Message: The file """ & strFileName & """ was not found!<BR>This could indicate that the file does not exist or you do not have the correct credentials for monitoring. <BR>" 
    WScript.Echo "Statistic: 0"
    WScript.Quit(strNotFound)
End If

Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Pattern = strPattern
objRegEx.IgnoreCase = True
Set objReadFile = objFSO.OpenTextFile(strFileName, ForReading)
x=1
prev_line3= objReadFile.ReadLine
prev_line2= objReadFile.ReadLine
prev_line1= objReadFile.ReadLine
Do Until objReadFile.AtEndOfStream

    strSearchString = objReadFile.ReadLine
    Set colMatches = objRegEx.Execute(strSearchString)  
    If colMatches.Count > 0 Then
        For Each strMatch in colMatches   
			If int(x) > int(PreviousFinds) Then		
				Wscript.Echo "Statistic: " & PreviousFinds+1

                       Wscript.Echo "Message: New search for """ & strSearch & """ was found: " & prev_line3 & prev_line2 & prev_line1 & strSearchString
                              Set objLog = objFSO.OpenTextFile(LogFile, 2, True)
                              objLog.WriteLine(Now & " - "  & PreviousFinds+1)
                              objLog.Close
                        Wscript.Quit(StrFound)
			End If
		x=x+1
        Next
    End If
 	prev_line3=prev_line2
    prev_line2=prev_line1
    prev_line1=strSearchString

Loop
If int(x) >1 Then
	Wscript.Echo "Statistic: " & PreviousFinds
    Wscript.Echo "Message: New search for """ & strSearch & """ was found, but previous searches did find """ & strSearchString & """."
    Wscript.Quit(StrFound) 	
End If
Wscript.Echo "Statistic: " & PreviousFinds 
Wscript.Echo "Message: Search for """ & strSearch & """ was not found."
Wscript.Quit(strNotFound)
objReadFile.Close

Open in new window

VMwareVB ScriptWindows 2000

Avatar of undefined
Last Comment
andressk

8/22/2022 - Mon