eventlog.ps1 - powershell script by ActiveXperts Software
eventlog.ps1 checks whether certain events exist in a Event Log.
Use eventlog.ps1 directly from ActiveXperts Network Monitor; in the Manager's 'Monitor' menu, select 'New Check (Script)' and select eventlog.ps1. Configure the required parameter, or press 'Load a working sample'.
In ActiveXperts Network Monitor, Administrators can use three different scripting languages: Powershell, VBScript and SSH.
eventlog.ps1 script code
################################################################################# # ActiveXperts Network Monitor PowerShell script, © ActiveXperts Software B.V. # For more information about ActiveXperts Network Monitor, visit the ActiveXperts # Network Monitor web site at http://www.activexperts.com ################################################################################# # Script # EventLog.ps1 # Description: # Checks if an event is present into the EventLog # Declare Parameters: # 1) strHost (string) - Hostname or IP address of the computer you want to ping # 2) strEvtLogFile (string) - Name of the Logfile, for instance: Application # 3) strEventID (string) - EventCode, for instance: '8000'. Use the '*' wildcard to select all # 4) strEvtSource (string) - Name of the Source, for instance ''AxNmSvc'. Use the '*' wildcard to select all # 5) strEvtDescriptionPattern (string)- Pattern to match in the description. Use the '*' wildcard to select all # 6) bErrorWhenFound (string) - When 1 or more events are matched, result is: Error or Success # 7) strAltCredentials (string, optional) - Specify an empty string to use Network Monitor service credentials. # To use alternate credentials, enter a server that is defined in Server Credentials table. # (To define Server Credentials, choose Tools->Options->Server Credentials) # Usage: # .\EventLog.ps1 '<Hostname | IP>' '<Application | System | ...>' <event_id> '<Source Name>' '<Pattern>' '<$true | $false> # Sample: # .\EventLog.ps1 'localhost' 'application' '1' 'AxNmSvc' 'ActiveXperts Network Monitor' '$false' # # This function uses of the 'ActiveXperts.NMWev' ActiveX control to access Windows .evt and .evtx Event Logs on remote computers. # The control simplifies the XPath programming logic, by providing easy-to-use functions to access event logs. # ActiveXperts.NMWev data members: # - LastError. Use it to check the result of a function. After a call to a function, LastError will be 0 for success, or else a positive error code. # Error codes can be lookup up here: http://www.activexperts.com/support/errorcodes/ # ActiveXperts.NMWev functions: # - Initialize( LogFile As String ). Initializes the 'ActiveXperts.NMWev' object. Pass a valid log filename for troubleshooting purposes/ # - Shutdown(). Call it to unintialize the object. Should always be called at the end of the script. # - Clear(). Clears the LastError property of the object. # - BuildQuery( EventLog As String, FilterSource As String, FilterEventID As String, FilterTaskCategory As String, FilterUser As String, FilterData As String, LevelFlags As Number, TimeSpanMilliseconds As Number ) # Function returns an XPath string that can be used in FindFirstEvent's first parameter. # Use the ActiveXperts Event Log Diagnostic Utility to see how XPath queries are defined. Such XPath string can be simply copy/pasted into this script, instead of using 'BuildQuery'. # - GetLevelFlag( Information As Boolean, LevelWarning As Boolean, LevelError As Boolean, LevelCritical As Boolean, LevelVerbose As Boolean, LevelSuccess As Boolean, LevelFailure As Boolean ) # The function returns a number value that can be used as input parameter to BuildQuery's LevelFlags parameter. # - Connect( Host As String, AlternateUser As String, AlternatePassword As String ) # Establishes a connection to a (remote) host. # AlternateUser and AlternatePassword should only be set in case alternate credentials should be used. # - Disconnect # Disconnects the connected session. # - FindFirstEvent( XPathQuery As String, MatchDescription As String, MatchDescriptionCase As Boolean, MatchDescriptionRegExpression As Boolean ) # The function returns the first event (As String). # Parameter XPathQuery: can be defined by BuildQuery function. # Parameter MatchDescription: the description pattern that should be matched, or empty if no pattern matching should be used. # Parameter MatchDescriptionCase: if MatchDescription is set, this parameter tells whether or not case senstsitive matching should be performed. # Parameter MatchDescriptionRegExpression: if MatchDescription is set, this parameter tells whether or not case regular expressions are used in MatchDescription # - FindNextEvent() # Retrieves the next event. Should always be called after a successfull call to FindNextEvent. ################################################################################# # -- Declare Parameters param( [string]$strHost = '', [string]$strLogName = '', [string]$strEventID = '', [string]$strEvtSource = '', [string]$strEvtDescriptionPattern = '', [string]$bErrorWhenFound = $false, [string]$strAltCredentials = '' ) # -- Use _activexperts.ps1 with common functions . 'C:\Program Files\ActiveXperts\Network Monitor\Scripts\Monitor (ps1)\_activexperts.ps1' ################################################################################# # // --- Main script --- ################################################################################# # -- Clear screen and clear error set-psdebug -strict cls $Error.Clear() # -- Validate parameters, return on parameter mismatch if( $strHost -eq '' -or $strLogName -eq '' -or -$strEventID -eq '' -or $strEvtSource -eq '' -or $strEvtDescriptionPattern -eq '' ) { $res = 'UNCERTAIN: Invalid number of parameters - Usage: .\EventLog.ps1 "<Hostname | IP>" "<Application | System | ...>" "<event_id>" "<Source Name>" "<Pattern>" "<$true | $false>"' echo $res exit } # -- Declare local variables by assigning initial value $strExplanation = '' $objAltCredentials = $null $objNmWev = new-object -comobject ActiveXperts.NMWev # If alternate credentials are specified, retrieve the alternate login and password from the ActiveXperts global settings if( $strAltCredentials -ne '' ) { # Get the Alternate Credentials object. Function "AxGetCredentials" is implemented in "_activexperts.ps1" if( ( AxGetCredentials $strHost $strAltCredentials ([ref]$objAltCredentials) ([ref]$strExplanation) ) -ne $AXSUCCESS ) { echo $strExplanation exit } } # Initialze EventLog object. Optional parameter: a log file, for debugging purposes $objNmWev.Initialize( '' ) if( $objNmWev.LastError -ne 0 ) { $res = 'ERROR: Failed to connect' echo $res exit } if( $strAltCredentials -ne '' ) { $objNmWev.Connect( $strHost, $objAltCredentials.Username, $objAltCredentials.Password ) } else { $objNmWev.Connect( $strHost, '', '' ) } if( $objNmWev.LastError -ne 0 ) { $res = 'ERROR: Failed to connect' echo $res exit } # Get Level Flag. # Param1: Information Events (yes/no) # Param2: Warning Events (yes/no) # Param3: Error Events (yes/no) # Param4: Critical Events (yes/no) # Param5: Verbose Events (yes/no) # Param6: Success Events (yes/no) # Param7: Failure Events (yes/no) $numLevelFlag = $objNmWev.GetLevelFlag( $true, $true, $true, $true, $true, $true, $true ) # Get Query string. # Param1: Event Log File, e.g. "Application" # Param2: Event Source. Use '*' for any source # Param3: Event ID. Use '*' for any event ID # Param4: Event Category. Use '*' for any event category $strQuery = $objNmWev.BuildQuery( $strLogName, $strEvtSource, $strEventID, '*', '*', '*', $numLevelFlag , 0 ) # Get First event # Param1: The Query # Param2: Description to match. If empty, no description pattern matching will be performed # Param3: Description matching case sensitive (yes/no) # Param4: Use regular expressions for pattern matching (yes/no) # NOTE: we're not making use of regular expressions. (change the latter to True if you wish!) # However, it is nice to have '*' as any description. Let's convert '*' to '' because that's what most people expect. if( $strEvtDescriptionPattern -eq '*' ) { strEvtDescriptionPattern = '' } $strEvent = $objNmWev.FindFirstEvent( $strQuery, $strEvtDescriptionPattern, $false, $false ) $numEvents = 0 while( $objNmWev.LastError -eq 0 ) { $numEvents += 1 $strEvent = $objNmWev.FindNextEvent() } $objNmWev.FindEventClose() if( $bErrorWhenFound -and ( $numEvents -gt 0 ) ) { $res = 'SUCCESS: Events found: [' + $numEvents + ']' + 'DATA:' + $numEvents } else { $res = 'ERROR: Events found: [' + $numEvents + ']' + 'DATA:' + $numEvents } # Disconnect $objNmWev.Disconnect() # Uninitialize $objNmWev.Shutdown() echo $res ################################################################################# trap [Exception] { $res = 'UNCERTAINs: ' + $_.Exception.Message echo $res exit }