<< Back to Script Library
Report slow logon to ServiceNow ITSM
This Script Action uses the ServiceNow API to create an incident in ServiceNow IT Service Management. The script as presented is for a specific use case: it creates an incident containing the user's full name, the user's logon duration and the machine name.
This Script Action can also be used as an example/template for your own ServiceNow integration needs. See the script for more details on how to modify.
This Script Action can also be used as an example/template for your own ServiceNow integration needs. See the script for more details on how to modify.
Version: 1.2.15
Created: 2020-10-21
Modified: 2020-12-01
Creator: Joel Stocker
Downloads: 78
Tags: logon duration rds servicenow user experience vdi
Created: 2020-10-21
Modified: 2020-12-01
Creator: Joel Stocker
Downloads: 78
Tags: logon duration rds servicenow user experience vdi
The Script
Copy Script
Copied to clipboard
<#
.SYNOPSIS
This Script Action uses the ServiceNow API to create an incident in ServiceNow IT Service Management.
.DESCRIPTION
The script as presented is for a specific use case (it creates an incident containing the user's full name, the user's logon duration and the machine name).
Tthis Script Action can also serve as an example/template for your own ServiceNow integration needs.
This script can be modified for other scenarios by modifying the following sections below:
- The CmdLetBinding section to match your Arguments
- The ServiceNow API call body
.NOTES
More details on how this script works can be found here https://www.controlup.com/10-simple-steps-to-build-your-own-integration-in-controlup/
For more information on how to use the ServiceNow API works, please read https://docs.servicenow.com/bundle/madrid-application-development/page/integrate/inbound-rest/concept/c_GettingStartedWithREST.html
.CONTEXT
Session
.MODIFICATION_HISTORY
Created: 2020-10-21
.AUTHOR
Joel Stocker https://twitter.com/joelinthecloud
#>
# 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 the user (1st line), the Machine Name (2nd line) and the Logon Duration (3rd line)
# Lines 4-6 are the details we need to authenticate to the ServiceNow API. The script will prompt for this when running a manual Script Action
# Make sure that you change the default values for the the 3 ServiceNow arguments to reflect your information if you want to use this script in an Automated Action (Trigger)
[CmdLetBinding()]
Param (
[Parameter(Mandatory=$true,HelpMessage='User Full Name')][ValidateNotNullOrEmpty()] [string]$caller,
[Parameter(Mandatory=$true,HelpMessage='Logon Duration')][ValidateNotNullOrEmpty()] [string]$logonduration,
[Parameter(Mandatory=$true,HelpMessage='Machine Name')][ValidateNotNullOrEmpty()] [string]$machinename,
[Parameter(Mandatory=$true,HelpMessage='ServiceNow Username')][ValidateNotNullOrEmpty()] [string]$username,
[Parameter(Mandatory=$true,HelpMessage='ServiceNow Password')][ValidateNotNullOrEmpty()] [string]$password,
[Parameter(Mandatory=$true,HelpMessage='ServiceNow Instance')][ValidateNotNullOrEmpty()] [string]$instanceid
)
# Put API Call URL in parameter consuming $instanceid from above
$apicallurl = "https://$instanceid.service-now.com/api/now/table/incident"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/json")
$headers.Add("Authorization", "Basic $base64AuthInfo")
# This section contains the body for the ServiceNow API call.
# The first part of each line is the ServiceNow Field parameter. The second part of each line is the value for the corresponsing Field parameter.
# Update this section to fit your needs and to match your ServiceNow instance fields (as well in case of adding additional metrics/information send to ServiceNow)
# For full details on the ServiceNow REST API please read https://docs.servicenow.com/bundle/madrid-application-development/page/integrate/inbound-rest/concept/c_GettingStartedWithREST.html
$body = "{
`n `"short_description`": `"Slow User Logon Incident`",
`n `"caller_id`": '$caller',
`n `"description`": `"User $caller's Logon Duration was $logonduration seconds on machine $machinename`"
`n}"
$response = Invoke-RestMethod $apicallurl -Method 'POST' -Headers $headers -Body $body
$IncidentNumber = $response.result.number
Write-Host "ServiceNow Incident $IncidentNumber Created"