Private/New-PSGelfObject.ps1

function New-PSGelfObject
{
    [cmdletbinding()]
    Param
    (
        [Parameter(Mandatory)][String]$GelfServer,

        [Parameter(Mandatory)][Int]$Port,

        [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
    )

    Begin
    {
    }
    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 = 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
    }
    End
    {
    }
}