This commit is contained in:
Zack Meier
2026-04-15 15:45:50 -05:00
commit 1d304511b8
613 changed files with 140998 additions and 0 deletions
@@ -0,0 +1,118 @@
<#
.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
}
}