functions/Send-SyslogMessage.ps1

function Send-SyslogMessage {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [string]$Message,

        [Parameter(Mandatory)]
        [string]$Server,

        [ValidateSet('UDP', 'TCP')]
        [string]$Protocol = 'UDP',

        [int]$Port
    )

    # Default syslog port
    if (-not $Port) {
        $Port = 514
    }

     $bytes = [System.Text.Encoding]::UTF8.GetBytes($Message)

    if ($Protocol -eq 'UDP') {
        $udpClient = New-Object System.Net.Sockets.UdpClient
        try {
            $udpClient.Connect($Server, $Port)
            $udpClient.Send($bytes, $bytes.Length) | Out-Null
        } finally {
            $udpClient.Close()
        }
    } elseif ($Protocol -eq 'TCP') {
        # Append newline for TCP syslog
        $tcpMessage = "$Message`n"
        $tcpBytes = [System.Text.Encoding]::UTF8.GetBytes($tcpMessage)
        $tcpClient = New-Object System.Net.Sockets.TcpClient
        try {
            $tcpClient.Connect($Server, $Port)
            $stream = $tcpClient.GetStream()
            $stream.Write($tcpBytes, 0, $tcpBytes.Length)
            $stream.Flush()
            $stream.Close()
        } finally {
            $tcpClient.Close()
        }
    }
}