Send a Slack Notification

Version: 1.18.27
Creator Name: Joel Stocker
Date Created: 2020-02-21
Date Modified: 2020-03-04
Scripting language: PS
Download Count: 23

This script will send a notification to a slack channel using the Incoming Webhooks app
Tags: slack,notifications

The Script

<#

    .SYNOPSIS
	This script will send a User session logon notification to a slack channel using Slack's Incoming Webhooks app

    .DESCRIPTION
	This script will use the Slack Incoming Webhooks API to send a message to a pre-defined Slack channel
	As a prerequisite you need to add and set up the Incoming Webhooks app in your Slack workspace and retrieve the Webhook URL (See NOTES below)
	
	This script can be modified for other scenarios by modifying the following sections below:
	- The CmdLetBinding section to match your Arguments
	- The Slack message text 

    .NOTES
	Instructions for setting up the Incoming Webhooks app on Slack.
		Follow these steps:
		Step 1: Add the app to your workspace by going to https://my.slack.com/apps and search for Incoming Webhooks
		Step 2: After selecting the Incoming Webhooks app click on "Add to Slack" on the left side of the page
		Step 3: Follow the on-screen instructions to configure the Incoming Webhooks app

		For more information on how to add and configure apps on Slack, please read: https://slack.com/help/articles/202035138-Add-an-app-to-your-workspace
		For more details on the Incoming Webhooks app, please read: https://api.slack.com/messaging/webhooks

	Addtional notes:
		I am using a custom "ControlUp icon" in the $body section below. If you want to use a different emoji please change to your preference
		More details: https://slack.com/slack-tips/upload-custom-slack-emoji-to-express-your-unique-office-culture

    .CONTEXT
	Session

    .MODIFICATION_HISTORY
	Created: 2020-03-04

    .AUTHOR
	Joel Stocker
#>

# This section sets the variables that are being used for both the API call body (next section) and the Rest API call URI (bottom section)
# It uses values from the "Arguments" tab in the Scripts Action interface in subsequent order (i.e. 1st line corresponds with $args[0], 2nd is $args[1], etc.)
# You can replace/add to match your needs. In this sample script we use the Full Name of a session user (1st line) and the Machine Name (2nd line)
# The third line set your Slack's Incoming Webhook URL. The script will prompt for your Incoming Webhook URL when running a manual Script Action
# Make sure that you change the default value for the Incoming Webhook URL argument to reflect your URL if you want to use this script in an automated Trigger
[CmdLetBinding()]
Param (
    [Parameter(Mandatory=$true,HelpMessage='User Full Name')][ValidateNotNullOrEmpty()] [string]$username,
    [Parameter(Mandatory=$true,HelpMessage='Machine Name')][ValidateNotNullOrEmpty()] [string]$machinename,
    [Parameter(Mandatory=$true,HelpMessage='Slack Webhook URL')][ValidateNotNullOrEmpty()] [string]$SlackIncomingWebhookUri
)

# This section constructs the $body value that will be send to Slack's webhook API using the variables set in the previous section
$body = @"
    {
        "username": "ControlUp Notification",
        "text": "User *$username* has logged on to machine *$machinename*",
        "icon_emoji":":controlup:"
    }
"@

# This section will send the API call using Powershell to Slack and Slack will process the request and send the notification
Invoke-RestMethod -uri $SlackIncomingWebhookUri -Method Post -body $body -ContentType 'application/json'