Write-UMN.psm1
# Module: Write-UMN function Write-UMN { <# .DESCRIPTION This function will send a message to a splunk HEC endpoint .PARAMETER msg string of the message to send .PARAMETER splunkIndex integer of the splunk index to send the message to .NOTES This function requires the UMN-Common module if splunk is enabled. It uses [string]$script:uriSplunk, [string]$script:headerSplunk, [string]$script:ScriptFileName, [switch]$script:Email, [switch]$script:Slack, [string]$script:Body. Those will all need to be defined in the script that calls this function. #> param ( [String]$Msg, [Switch]$IsError, [String]$ErrorAction = 'Stop' ) if ($Splunk -and $AzureKeyName) { $Script:splunkIndex += 1 #region Init if ($PSPrivateMetadata.JobId.Guid) { $JobID = $PSPrivateMetadata.JobId.Guid } else { $JobID = (New-Guid).Guid } $RbHost = $Env:COMPUTERNAME ## Splunk Prep $ScriptFileName = $script:ScriptFileName $BodySplunkBase = @{'host' = $RbHost; 'source' = $ScriptFileName; 'sourcetype' = 'HEC:AzureRunbook' } #endregion $Null = Send-SplunkHEC -uri $Script:uriSplunk -metadata $BodySplunkBase -header $Script:headerSplunk -eventData @{'jobID' = $JobID; 'msg' = $Msg; 'Index' = $Script:splunkIndex } } #write outputs to the console and stop if it's an error if ($IsError) { Write-Error $Msg -ErrorAction $ErrorAction } else { Write-Warning -Message $Msg } if ($Script:Email -or $Script:Slack) { $Script:Body += $Msg + "`n" } return $Msg } function Send-Slack { <# .DESCRIPTION This function will send a message to a slack channel .PARAMETER Message string of the message to send .PARAMETER SlackChannel string of the slack channel to send the message to .PARAMETER Title string of the title of the message .PARAMETER URI string of the URI to send the message to .EXAMPLE Send-Slack -Title "Test Message" -Message "This is a test message" -SlackChannel "#t3-virt-info" -URI (Get-AzKeyVaultSecret -VaultName 'HEAT-Automation-KV' -Name 'virt-slack-runbook-alerts' -AsPlainText)" #> param ( [Parameter (Mandatory = $True)] [string]$Message, [Parameter (Mandatory = $True)] [string]$SlackChannel, [Parameter (Mandatory = $True)] [string]$Title, [Parameter (Mandatory = $True)] [string]$URI ) $ContentType = 'application/json' $SlackBody = @" { "text": "$Title", "channel": "$slackChannel", "attachments": [ { "text": "$Message" } ] } "@ Invoke-RestMethod -Uri $URI -Method Post -Body $SlackBody -ContentType $ContentType } |