Skip to main content

Writing Event Log Entries with PowerShell

PowerShell contains a cmdlet, Write-EventLog that will allow you to place custom events generated by your scripts into the clients event logs.  One problem that I have had with this approach is that the source that is generating the event log entry needs to be registered with the log you are writing to.  In other words, an extra procedure on each client/server that needs to be completed before the script can be used.  Another option is to use the Windows PowerShell event log itself.  Take a look at this code:

Write-EventLog -Source PowerShell -LogName "Windows PowerShell" -EventId 10000 -EntryType Information -Message "This is a test"

 

Here you can see that we are using the Source of PowerShell with the event log of Windows PowerShell.  The key to using the Windows PowerShell event log for your own purposes is to make sure that you are using event IDs that are unique. Using this code, I was able to get an idea for the Event IDs being used by the Windows PowerShell event log.

 

Get-WinEvent -LogName "Windows PowerShell" |

 Select-Object -Property ID -Unique

It appeared that anything over 10000 was available.  When developing code that you want to make entries in the Windows PowerShell event log, make an Excel spread sheet of your scripts and the event ID numbers it will use.  Allow for some room for growth so separate blocks by sizes of 25 or 50.  That way as you add new code to the script in the future, your event IDs for that script will be sequential.  Having this list will also help you understand which IDs that you need to look up.  When you need to recover all the events from a particular script, you simply provide the Event ID range for that script.

$LogHash = @{LogName = "Windows PowerShell"; ID = 10000..10024}

Get-WinEvent -FilterHashtable $LogHash

A parameter that may help you clarify what you are writing in the event log is –EntryType.  EntryType has the following values:

  • Error
  • Warning
  • Information
  • SuccessAudit
  • FailureAudit

Using this parameter will help you to further filter your search results. It will also allow you to reuse event IDs because they will have different EventTypes.

For those of you who wish to create a custom event log for your scripts, take a look at the help file for New-EventLog.

Comments

Popular posts from this blog

Adding a Comment to a GPO with PowerShell

As I'm writing this article, I'm also writing a customization for a PowerShell course I'm teaching next week in Phoenix.  This customization deals with Group Policy and PowerShell.  For those of you who attend my classes may already know this, but I sit their and try to ask the questions to myself that others may ask as I present the material.  I finished up my customization a few hours ago and then I realized that I did not add in how to put a comment on a GPO.  This is a feature that many Group Policy Administrators may not be aware of. This past summer I attended a presentation at TechEd on Group Policy.  One organization in the crowd had over 5,000 Group Policies.  In an environment like that, the comment section can be priceless.  I always like to write in the comment section why I created the policy so I know its purpose next week after I've completed 50 other tasks and can't remember what I did 5 minutes ago. In the Group Policy module for PowerShell V3, th

Return duplicate values from a collection with PowerShell

If you have a collection of objects and you want to remove any duplicate items, it is fairly simple. # Create a collection with duplicate values $Set1 = 1 , 1 , 2 , 2 , 3 , 4 , 5 , 6 , 7 , 1 , 2   # Remove the duplicate values. $Set1 | Select-Object -Unique 1 2 3 4 5 6 7 What if you want only the duplicate values and nothing else? # Create a collection with duplicate values $Set1 = 1 , 1 , 2 , 2 , 3 , 4 , 5 , 6 , 7 , 1 , 2   #Create a second collection with duplicate values removed. $Set2 = $Set1 | Select-Object -Unique   # Return only the duplicate values. ( Compare-Object -ReferenceObject $Set2 -DifferenceObject $Set1 ) . InputObject | Select-Object – Unique 1 2 This works with objects as well as numbers.  The first command creates a collection with 2 duplicates of both 1 and 2.   The second command creates another collection with the duplicates filtered out.  The Compare-Object cmdlet will first find items that are diffe

How to list all the AD LDS instances on a server

AD LDS allows you to provide directory services to applications that are free of the confines of Active Directory.  To list all the AD LDS instances on a server, follow this procedure: Log into the server in question Open a command prompt. Type dsdbutil and press Enter Type List Instances and press Enter . You will receive a list of the instance name, both the LDAP and SSL port numbers, the location of the database, and its status.