Private/New-PSGelfObject.ps1
function New-PSGelfObject { [cmdletbinding()] Param ( [Parameter(Mandatory)][String]$GelfServer, [Parameter(Mandatory)][Int]$Port, [Parameter()][switch]$Encrypt, [Parameter()][String]$HostName, [Parameter(Mandatory)][String]$ShortMessage, [Parameter()][String]$FullMessage, [Parameter()][System.DateTime]$DateTime, [Parameter()][Int]$Level, [Parameter()][String]$Facility, [Parameter()][Int]$Line, [Parameter()][String]$File, [Parameter()][Hashtable]$AdditionalField ) Process { $Message = New-Object –TypeName PSObject $Message | Add-Member –MemberType NoteProperty –Name version –Value "1.1" $Message | Add-Member –MemberType NoteProperty –Name ShortMessage –Value $ShortMessage if (!$HostName) { $HostName = & {hostname} } $Message | Add-Member –MemberType NoteProperty –Name host –Value $HostName if ($FullMessage) { $Message | Add-Member –MemberType NoteProperty –Name full_message –Value $FullMessage } if ($DateTime) { $TimeStampConversion = [double]$(Get-Date($DateTime).ToUniversalTime() -uformat "%s") $Message | Add-Member –MemberType NoteProperty –Name timestamp –Value $TimeStampConversion } if ($Level ) { $Message | Add-Member –MemberType NoteProperty –Name level –Value $Level } if ($Facility) { $Message | Add-Member –MemberType NoteProperty –Name facility –Value $Facility } if ($Line) { $Message | Add-Member –MemberType NoteProperty –Name line –Value $Line } if ($File) { $Message | Add-Member –MemberType NoteProperty –Name file –Value $File } if ($AdditionalField) { ($AdditionalField).GetEnumerator() | ForEach-Object { $FieldName = "_" + $_.Name $FieldValue = $_.Value if(!($FieldName -eq "_id")) { $Message | Add-Member –MemberType NoteProperty –Name $FieldName –Value $FieldValue } else { throw 'An additionional field can not be named ID.' } } } Write-Output $Message } } |