Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Send-SyslogMessage
- {
- <#
- .SYNOPSIS
- Sends a SYSLOG message to a server running the SYSLOG daemon
- .DESCRIPTION
- Sends a message to a SYSLOG server as defined in RFC 5424. A SYSLOG message contains not only raw message text,
- but also a severity level and application/system within the host that has generated the message.
- .PARAMETER Server
- Destination SYSLOG server that message is to be sent to
- .PARAMETER Message
- Our message
- .PARAMETER Severity
- Severity level as defined in SYSLOG specification, must be of ENUM type Syslog_Severity
- .PARAMETER Facility
- Facility of message as defined in SYSLOG specification, must be of ENUM type Syslog_Facility
- .PARAMETER Hostname
- Hostname of machine the mssage is about, if not specified, local hostname will be used
- .PARAMETER Timestamp
- Timestamp, myst be of format, "yyyy:MM:dd:-HH:mm:ss zzz", if not specified, current date & time will be used
- .PARAMETER UDPPort
- SYSLOG UDP port to send message to
- .INPUTS
- Nothing can be piped directly into this function
- .OUTPUTS
- Nothing is output
- .EXAMPLE
- Send-SyslogMessage mySyslogserver "The server is down!" Emergency Mail
- Sends a syslog message to mysyslogserver, saying "server is down", severity emergency and facility is mail
- .NOTES
- NAME: Send-SyslogMessage
- AUTHOR: Kieran Jacobsen
- LASTEDIT: 2014 07 01
- KEYWORDS: syslog, messaging, notifications
- .LINK
- https://github.com/kjacobsen/PowershellSyslog
- .LINK
- http://aperturescience.su
- #>
- [CMDLetBinding()]
- Param
- (
- [Parameter(mandatory=$true)] [String] $Server,
- [Parameter(mandatory=$true)] [String] $Message,
- [Parameter(mandatory=$true)] [Syslog_Severity] $Severity,
- [Parameter(mandatory=$true)] [Syslog_Facility] $Facility,
- [String] $Hostname,
- [String] $Timestamp,
- [int] $UDPPort = 514
- )
- # Create a UDP Client Object
- $UDPCLient = New-Object System.Net.Sockets.UdpClient
- $UDPCLient.Connect($Server, $UDPPort)
- # Evaluate the facility and severity based on the enum types
- $Facility_Number = $Facility.value__
- $Severity_Number = $Severity.value__
- Write-Verbose "Syslog Facility, $Facility_Number, Severity is $Severity_Number"
- # Calculate the priority
- $Priority = ($Facility_Number * 8) + $Severity_Number
- Write-Verbose "Priority is $Priority"
- # If no hostname parameter specified, then set it
- if (($Hostname -eq "") -or ($Hostname -eq $null))
- {
- $Hostname = Hostname
- }
- # I the hostname hasn't been specified, then we will use the current date and time
- if (($Timestamp -eq "") -or ($Timestamp -eq $null))
- {
- $Timestamp = Get-Date -Format "yyyy:MM:dd:-HH:mm:ss zzz"
- }
- # Assemble the full syslog formatted message
- $FullSyslogMessage = "<{0}>{1} {2} {3}" -f $Priority, $Timestamp, $Hostname, $Message
- # create an ASCII Encoding object
- $Encoding = [System.Text.Encoding]::ASCII
- # Convert into byte array representation
- $ByteSyslogMessage = $Encoding.GetBytes($FullSyslogMessage)
- # If the message is too long, shorten it
- if ($ByteSyslogMessage.Length -gt 1024)
- {
- $ByteSyslogMessage = $ByteSyslogMessage.SubString(0, 1024)
- }
- # Send the Message
- $UDPCLient.Send($ByteSyslogMessage, $ByteSyslogMessage.Length)
- }
Advertisement
Add Comment
Please, Sign In to add comment