MessageHandling.psm1
Function Write-Message{ <# .SYNOPSIS Handle message events in a script .DESCRIPTION Write log files, event logs, host messages and perform a specfic task based on the type of message .PARAMETER Message The message that is to be written .PARAMETER MessageType The type of message, Valid types Error Warning Information and SuccessAudit .PARAMETER WriteLog Path to log file, if not specified no messages will be written to a log Writes the log in a csv format .PARAMETER WriteEvent Writes the message to the application event log .PARAMETER Source Specifies where the event was created from, if not specified will default to MosaicMK Message Handling .PARAMETER WriteToHost Writes the message to the PowerShell host .PARAMETER CloseOnError When an error message type is written the script will exit .PARAMETER CloseOnSuccess When a SuccessAudit message type is written the script will exit .PARAMETER EventID The event number that will be written to the log file, Event log and used as an exit code when exit CloseOnError or CloseOnSuccess is used. if not specified the script will default the Event ID to the following: Error = 1 Warning = 2 Information = 100 SuccessAudit = 0 .EXAMPLE Write-Message -Message "Starting Proccess" -MessageType Information -WriteLog C:\Logs\proccess.log -WriteEvent -WriteToHost Writes the message 'Starting Proccess' to the proccess.log file, The Event log and to the PowerShell host window as a Information message type .EXAMPLE Write-Message -Message "Starting Proccess" -MessageType Warning -WriteToHost Writes the message 'Starting Proccess' to the PowerShell host window as a warning message type .EXAMPLE Write-Message -Message "Could not stop proccess" -MessageType Error -WriteEvent -CloseOnError -EventID 500 Writes the message to the event log then closes exits the script with event id 500 .NOTES A function for each message type is present so addition tasks can be competed when a message of a specific type is written. Copyright (C) MosaicMK Software LLC - All Rights Reserved Unauthorized copying of this application via any medium is strictly prohibited Proprietary and confidential Written by MosaicMK Software LLC (contact@mosaicmk.com) By using this software you agree to the following: Agreement Permission is hereby granted, free of charge, to any person or organization obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software and the rights to use and distribute the software so long a no licensing and or documentation files are remove, revised or modified the Software is furnished to do so, subject to the following conditions: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Contact: Contact@MosaicMK.com Version 1.1.0 .LINK https://www.mosaicmk.com #> PARAM( [Parameter(Mandatory=$true)] [String]$Message, [Parameter(Mandatory=$true)] [ValidateSet('Error','Warning','Information','SuccessAudit')] [string]$MessageType, [string]$WriteLog, [switch]$WriteEvent, [string]$Source, [switch]$WriteToHost, [switch]$CloseOnError, [switch]$CloseOnSuccess, [int]$EventID ) $Time = Get-Date #If no Event ID was set, sets the Event ID based on the message type IF (!($EventID)){ switch ($MessageType) { Error {$EventID = 1} Warning {$EventID = 2} Information {$EventID = 100} SuccessAudit {$EventID = 0} } } #if no source was specified uses "MosaicMK Message Handling" as the source IF (!($Source)){$Source = "MosaicMK Message Handling"} #Function to run then an Error Message Type is written function Invoke-error { Write-Error "$Message" -ErrorAction SilentlyContinue IF ($WriteToHost){$Host.UI.WriteErrorLine("$Message")} IF ($CloseOnError){Exit $EventID} } #Function to run then a Warning Message Type is written function Invoke-Warning { IF ($WriteToHost){$Host.UI.WriteWarningLine("$Message")} } #Function to run then an Information Message Type is written function Invoke-Information { IF ($WriteToHost){Write-Host "$Message"} } #Function to run then a SuccessAudit Message Type is written Function Invoke-SuccessAudit { IF ($WriteToHost){Write-Host "$Message"} IF ($CloseOnSuccess){Exit $EventID} } #if a log file is specified writes the message to the log file IF ($WriteLog){ IF (!(Test-Path $WriteLog)){New-Item $WriteLog -ItemType File -Force | out-null;Add-Content -Value "Time, Message Type, Event ID, Message" -Path $WriteLog} Add-Content -Value "$Time, $MessageType, $EventID, $Message" -Path $WriteLog } #if the writeEvent switch was used, write the message to the application event log IF ($WriteEvent){ New-EventLog -LogName Application -Source $Source -ErrorAction SilentlyContinue Write-EventLog -LogName Application -EventId $EventID -Source $Source -EntryType $MessageType -Message $Message -InformationAction SilentlyContinue } #foreach message type run the corresponding function switch ($MessageType) { Error {Invoke-error} Warning {Invoke-Warning} Information {Invoke-Information} SuccessAudit {Invoke-SuccessAudit} } } |