Public/Write-WinEvent.ps1
function Write-WinEvent { [CmdLetBinding()] param( [string]$LogName, [string]$Provider, [int64]$EventId, [System.Diagnostics.EventLogEntryType]$EventType, [System.Collections.Specialized.OrderedDictionary]$EventData, [ValidateSet('JSON','CSV','XML')] [string]$MessageFormat='JSON' ) $EventMessage = [System.Collections.Generic.List[string]]::new() switch ($MessageFormat) { 'JSON' { $Json = $EventData | ConvertTo-Json $EventMessage.Add($Json) } 'CSV' { $Csv = ($EventData.GetEnumerator() | Select-Object -Property Key,Value | ConvertTo-Csv -NoTypeInformation) -join "`n" $EventMessage.Add($Csv) } 'XML' { $Xml = ($EventData | ConvertTo-Xml).OuterXml $EventMessage.Add($Xml) } } foreach ($Key in $EventData.Keys) { $EventMessage.Add(('{0}:{1}' -f $Key,$EventData.$Key)) } try { $Event = [System.Diagnostics.EventInstance]::New($EventId,$null,$EventType) $EventLog = [System.Diagnostics.EventLog]::New() $EventLog.Log = $LogName $EventLog.Source = $Provider $EventLog.WriteEvent($Event,$EventMessage) } catch { $PSCmdlet.ThrowTerminatingError($_) } } |