118 lines
3.9 KiB
PowerShell
118 lines
3.9 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
A short one-line action-based description, e.g. 'Tests if a function is valid'
|
|
.DESCRIPTION
|
|
A longer description of the function, its purpose, common use cases, etc.
|
|
.NOTES
|
|
Information or caveats about the function e.g. 'This function is not supported in Linux'
|
|
.LINK
|
|
Specify a URI to a help page, this will show when Get-Help -Online is used.
|
|
.EXAMPLE
|
|
Test-MyTestFunction -Verbose
|
|
Explanation of the function or its result. You can include multiple examples with additional .EXAMPLE lines
|
|
#>
|
|
|
|
function Update-ITDServiceNowRecord {
|
|
[CmdletBinding()]
|
|
param (
|
|
[Parameter(ParameterSetName = 'ItemType')]
|
|
[ValidateSet('Incident', 'Change Request', 'User', 'Catalog Task', 'Request Item')]
|
|
[string]
|
|
$ItemType,
|
|
|
|
[Parameter(ParameterSetName = 'Table')]
|
|
[string]
|
|
$Table,
|
|
|
|
[string]
|
|
$SysId,
|
|
|
|
[string]
|
|
$Number,
|
|
|
|
[hashtable]
|
|
$Values
|
|
)
|
|
|
|
begin {
|
|
|
|
|
|
}
|
|
|
|
process {
|
|
switch ($PSCmdlet.ParameterSetName) {
|
|
'ItemType' {
|
|
$Table = Get-ITDServiceNowTable -ItemType $ItemType
|
|
}
|
|
'Table' {
|
|
# examples: 'cmdb_ci_win_server', 'cmdb_ci_ip_network', 'cmdb_ci_service_auto', 'sc_item_option_mtom'
|
|
# don't do anything
|
|
}
|
|
}
|
|
|
|
$Uri = ($Script:ServiceNowSession.Uri + "/api/now/table/" + $Table + "?")
|
|
#$Uri = ('https://northdakotatest.service-now.com' + "/api/now/table/" + $Table + "?")
|
|
|
|
switch ($PSBoundParameters.Keys) {
|
|
SysId {
|
|
Write-Verbose -Message ("sysid passed " + $PSBoundParameters.Item('sysid'))
|
|
$Uri += "sys_id=$SysId"
|
|
}
|
|
Number {
|
|
Write-Verbose -Message ("number passed " + $PSBoundParameters.Item('number'))
|
|
$Uri += "sysparm_query=number=$Number"
|
|
}
|
|
}
|
|
|
|
Write-Verbose $uri
|
|
$InvokeRestMethodParams = @{
|
|
Method = 'Get';
|
|
Uri = $Uri
|
|
#Uri = ($Script:ServiceNowSession.Uri + "/api/now/table/" + $Table + "?sysparm_query=number=" + $Number + "&sysparm_limit=1");
|
|
Headers = $Script:ServiceNowSession.Headers;
|
|
ContentType = $Script:ServiceNowSession.ContentType;
|
|
}
|
|
|
|
try {
|
|
$RecordSearch = (Invoke-RestMethod @InvokeRestMethodParams).Result
|
|
$Uri = $null
|
|
}
|
|
catch [System.UriFormatException] {
|
|
Write-Error "Invalid URI session. Did you run New-ITDServiceNowSession before execution?"
|
|
}
|
|
|
|
switch (@($RecordSearch).count) { # @($Result).count
|
|
{ $_ -lt 1 } {
|
|
Write-Error -Message "Record not found"
|
|
}
|
|
{ $_ -gt 1 } {
|
|
Write-Error -Message "More than one record found"
|
|
}
|
|
{ $_ -eq 1 } {
|
|
Write-Verbose -Message 'Exactly one record found'
|
|
$SysId = $RecordSearch.sys_id
|
|
|
|
$Uri = ($Script:ServiceNowSession.Uri + "/api/now/table/" + $Table + "/" + $SysId)
|
|
Write-Verbose $Uri
|
|
$InvokeRestMethodParams = @{
|
|
Method = 'Patch';
|
|
Uri = $Uri
|
|
Body = $Values | ConvertTo-Json;
|
|
Headers = $Script:ServiceNowSession.Headers;
|
|
ContentType = $Script:ServiceNowSession.ContentType;
|
|
}
|
|
|
|
try {
|
|
$UpdateResult = (Invoke-RestMethod @InvokeRestMethodParams).Result
|
|
}
|
|
catch [System.UriFormatException] {
|
|
Write-Error "Invalid URI session. Did you run New-ITDServiceNowSession before execution?"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
end {
|
|
Write-Output $UpdateResult
|
|
}
|
|
} |