Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use Powershell to download attached excel file from Servicenow ticket

I'm currently working on a powershell script that should be able to download an attached excel file from a service now ticket, before I explain more please see the basic flow of the automation below.

  1. The user will be asked to enter the ticket number.

enter image description here

  1. The system will then find that incident ticket to accurately get the excel file needed(I saw online that I need to use sys_id).
  2. It will then be downloaded to a specific path on the user's machine. ex: "C:\downloads\Demo\".

Following all this, I found a sample script online that I'm trying to configure to match my needs; however, I'm not sure where to get the values on that sample script. You can check the bullets below the script for the questions I have in mind.

$IncidentNumber = Read-Host -Prompt 'Enter Incident Request #'
#$admin = "admin"
#$password = "admin" | ConvertTo-SecureString -AsPlainText -Force 
#$Credential = New-Object pscredential -ArgumentList ($admin,$password)
$Uri = "https://dev42835.service-now.com/api/now/table/incident?sysparm_query=number=$($IncidentNumber)&sysparm_fields=sys_id&sysparm_limit=1"
$IncidentResult = Invoke-RestMethod -Uri $Uri #-Method Get -Credential $Credential
if($IncidentResult.result.sys_id -ne $null) {
    $IncidentAttachments = Invoke-RestMethod -Uri "https://dev42835.service-now.com/api/now/attachment?sysparm_query=table_sys_id=$($IncidentResult.result.sys_id)" #-Method Get -Credential $Credential
    $IncidentAttachments.result | Select file_name , download_link
}
else{
    "Incident Not Found!"
}
  • Do I really need the credentials to run the script? If yes, is there a way to remove the need of the credentials?
  • Where can I get the URL that is assigned to the $URI variable?

I'm new to powershell automation so I would appreciate it if you can recommend better approach if there are any.

like image 431
Kent Abrio Avatar asked Feb 13 '20 07:02

Kent Abrio


People also ask

How do I export Excel from PowerShell?

As of now, there is no built-in command like CSV (Export-CSV) to export output to the excel file but we can use the Out-File command to export data to excel or any other file format. Let's use Out-File to export the output of the Get-Processes command to an excel file.

How do I import an Excel file into PowerShell?

Importing data from Excel To import data, I use the Import-Excel cmdlet and specify the path. In this example, I will also save the data to a variable called "Fruit" for later use. Now, we have a simple table with data organized in columns and rows.


1 Answers

Yes, you need credentials but don't hard code them like that. Instead you can use built-in method Get-Credential that will securely collect your username and password. The user will have to enter their own ServiceNow credentials each time this is run.

My version only has one thing you need to configure, the $SubDomain variable which is specific to your tenant.

$SubDomain = "YourServiceNowSubdomaingoeshere" # Configure this per tenant

$Credential = Get-Credential
If(!$Credential){
    # User Cancelled
    exit 1
}

$IncidentNumber = Read-Host -Prompt 'Enter Incident Request #'
$Uri = "https://$SubDomain.service-now.com/api/now/table/incident?sysparm_query=number=$($IncidentNumber)&sysparm_fields=sys_id&sysparm_limit=1"
$IncidentResult = Invoke-RestMethod -Uri $Uri -Method Get -Credential $Credential
if($IncidentResult.result.sys_id -ne $null) {
    $IncidentAttachments = Invoke-RestMethod -Uri "https://$SubDomain.service-now.com/api/now/attachment?sysparm_query=table_sys_id=$($IncidentResult.result.sys_id)" -Method Get -Credential $Credential
    $IncidentAttachments.result | Select file_name , download_link
}
else{
    "Incident Not Found!"
}
like image 176
HackSlash Avatar answered Sep 17 '22 12:09

HackSlash