Review Services Start and Stop times via Windows Event Log And Powershell


Weeks ago, one of our critical applications experienced a down time because SQL Server did not auto-start post application of Windows Patches.

Over the weekend, new patches were applied and unfortunately I am just now reviewing the SQL Instances to make sure everything is good this time.

Better late than never is a silly excuse.

But, I really do have to close this Service Now ticket that requests the DBA validation; we have already exceeded our SLA.


MS Windows Event Log is not so flexible for text searches.  I am able to filter on specific categories, but forget about it when it comes to looking for just specific services start and down times.

It is easy enough to do if I issue Transact SQL Queries or just looking at datetime stamps of sql server errorlog files.

But, I wanted an excuse to script services start and stop times

I really looked old and sluggish and it took a lot longer than it should.

But, here is what we have thus far.




Here are images of the data


Detail – XML


  1. EventData
    • EventData – param1
      • SQL Server (MSSQLServer)
    • EventData – param2
      • running


# define parameters

# log system to target

# provider name
$providerName="Service Control Manager"

#event ID

# only return entries that have sql in their name

# use wilcard *message*
$messageWildcard=[string]::Concat($CHAR_WILDCARD, $message, $CHAR_WILDCARD);

# gete events use wilcard *message*
$events = Get-WinEvent -FilterHashtable @{LogName=$logName; ProviderName=$providerName; ID=$eventID} | 
			where {$_.Message -like $messageWildcard} |
			Sort-Object -Property TimeCreated -Descending 

#alternate filtering mechanism
$eventSQL = $events | where {$_.Message -like $messageWildcard};

#if data returned
if ($eventSQL) {

	#Add Service Name to object property list
	$eventSQL | Add-Member -Name 'serviceName' -Type NoteProperty -Value "";
	#Add Service Status to object property list	
	$eventSQL | Add-Member -Name 'serviceStatus' -Type NoteProperty -Value "";

	# Parse out the event message data            
	ForEach ($eventObj in $eventSQL) {  
		# Convert the event to XML            
		$eventObjXML = [xml]$eventObj.ToXml()            
		# Iterate through each one of the event Data fields
		# get handle to event // eventData // Data	
		For ($i=0; $i -lt $eventObjXML.Event.EventData.Data.Count; $i++) {            
			# get handle to event // eventData // Data // Name	
			$itemName = $eventObjXML.Event.EventData.Data[$i].name;
			# get handle to event // eventData // Data // Text
			$itemValue = $eventObjXML.Event.EventData.Data[$i].'#text';
			# if attribute name is param1, we are fetching the service name
			if ($itemName -eq "param1")
				$eventObj.serviceName = $itemValue;
			# if attribute name is param2, we are fetching the service state
			elseif ($itemName -eq "param2")
				$eventObj.serviceStatus = $itemValue;
		} ## for event data
	} ## move to next event object           
	## display data
	$eventSQL | Select-Object TimeCreated, Message, serviceName, serviceStatus | Format-List



Nothing original here as can be deduced by the many people listed in the References section.

Having acknowledged so, it still amazes how many people put in so much work and happily package it in such a way that someone else can feel comfortable following behind.

For some of us it takes a lot longer, yet we know we know we will get there someday; as there is proof others did.


Source Code Control


Availed on GitHub here.


  1. Microsoft | Technet
    1. Ashley McGlone
      • PowerShell Get-WinEvent XML Madness: Getting details from event logs
  2. Microsoft | Developer Network
    • JuanPablo Jofre
  3. Microsoft | Technet
    • The Scripting Guys
      • Use FilterHashTable to Filter Event Log with PowerShell
  4. PoshCode: PowerShell Code Repository
    • Cameron Wilson
      • Get-LatestEventFromAllLogs
  5. Mike F Robbins
    • PowerShell: Filter by User when Querying the Security Event Log with Get-WinEvent and the FilterHashTable Parameter
  6. Josh Ancel
    • Filter Event Log on Message string using PowerShell
  7. Colleen Morrow
    • Parsing Windows event logs with PowerShell
  8.  Netwrix
    • Russell Smith
      • Advanced Event Log Filtering Using PowerShell
  9. Techrepublic
    • Greg Shultz
      • How to extend your event log search capabilities with PowerShell’s Get-EventLog cmdlet
  10. 4SysOps
    • Luc Fullenwarth
    • Using Get-WinEvent to look at Windows Event Log

Leave a Reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s