# required for basic auth
$Url = "https://northdakota.service-now.com"
$HeaderAuth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $SNowVMCred.UserName, $SnowVMCred.GetNetworkCredential().Password)))
$SNOWSessionHeader = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$SNOWSessionHeader.Add('Authorization', ('Basic {0}' -f $HeaderAuth))
$SNOWSessionHeader.Add('Accept', 'application/json')
$Type = "application/json"

# open incident in webgui, sysid is in the url
# example:  https://northdakotatest.service-now.com/nav_to.do?uri=%2Fincident.do%3Fsys_id%3Db6e3f5d91b9a29d0128ec806604bcb9a%26sysparm_record_target%3Dtask%26sysparm_record_row%3D7%26sysparm_record_rows%3D10%26sysparm_record_list%3Dactive%3Dtrue%5Eassigned_to%3Djavascript:gs.user_id()%5EORDERBYDESCnumber
# sys_id=guid
Invoke-RestMethod -Method GET -Uri ($Url + "/api/now/table/incident/b6e3f5d91b9a29d0128ec806604bcb9a") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov x

# 10000 results
#Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/incident") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov y

#### better formatting
$InvokeRestMethodParams = @{
    Method      = 'Get';
    Uri         = ($Url + "/api/now/table/sc_req_item");
    ContentType = $Type;
    Headers     = $SNOWSessionHeader;
    Body        = @{
        sysparm_query = 'number=RITM0282695';
        sysparm_limit = 1;
        sysparm_display_value = 'true';  #### show human readable values, not just sysids
        sysparm_fields = 'request,cat_item';
    }

}
(Invoke-RestMethod @InvokeRestMethodParams -ov c).result


# known tables below
# incident  INC########
Invoke-RestMethod -Method GET -Uri ($Url + "/api/now/table/incident?sysparm_query=number=INC0437213&sysparm_limit=1") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov x
Invoke-RestMethod -Method GET -Uri ($Url + "/api/now/table/incident?sysparm_query=number=INC0437213&sysparm_limit=1&sysparm_display_value=true") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov y

# change_request  CHG########
Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/change_request?sysparm_query=number=CHG0089327&sysparm_limit=1") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type

#sc_request  REQ########
Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/sc_request?sysparm_query=number=REQ0129027&sysparm_limit=1") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type

#sc_req_item  RITM########
Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/sc_req_item?sysparm_query=number=RITM0134884&sysparm_limit=1") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type

#sc_task SCTASK#######

#sys_user
Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/sys_user?sysparm_query=email=zmeier@nd.gov&sysparm_limit=1") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov x

#sys_user_group
Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/sys_user_group?name=NDIT-Computer Systems&sysparm_limit=1") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov x

# cmdb_ci_ip_network
Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/cmdb_ci_ip_network") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov x

# appname / cmdb_ci_service_auto_list
Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/cmdb_ci_service_auto") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov x

https://northdakota.service-now.com/cmdb_ci_service_auto_list.do?sysparm_target=ni.VEacf3763e475c7514baa37834846d433c&sysparm_target_value=&sysparm_reference_value=&sysparm_nameofstack=reflist&sysparm_clear_stack=true&sysparm_element=not&sysparm_reference=cmdb_ci_service_auto&sysparm_view=sys_ref_list&sysparm_form_view=default&sysparm_additional_qual=&sysparm_parent_id=a3feaecb47d0b914baa37834846d4381&sysparm_domain_restore=false

# all tables
$a = Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/sys_db_object") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type


Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/sc_ic_category_request?&sysparm_limit=100") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov c

# searching incidents
?sysparm_query=number=INC0437213
sysparm_query%3Dshort_descriptionLIKEhardware
Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/incident&sysparm_limit=3?sysparm_query=short_descriptionLIKEhardware") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov x


# cmdb_ci_vmware_instance
Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/cmdb_ci_vmware_instance") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov x

# create records
# incident
[PSCustomObject]$NewRecord = @{
    short_description = "failed machine";
    caller_id         = "Zachary L Meier";
    # and others, get record to view
}
$InvokeRestMethodParams = @{
    Method      = 'Post';
    Uri         = ($Url + "api/now/table/incident");
    Body        = $NewRecord | ConvertTo-Json;
    Headers     = $SnowSessionHeader;
    ContentType = "application/json"
}

Invoke-RestMethod @InvokeRestMethodParams



# update records
# incident, sys_id required
# incident state 1 = new, 2 = in progress, 3 = on hold
[PSCustomObject]$SetRecord = @{
    short_description = "lots of failed hardware";
    description       = "omg send help"
    caller_id         = "Zachary L Meier";
    state             = 3 # on hold

    # and others, get record to view remaining options
}
$InvokeRestMethodParams = @{
    Method      = 'Put';
    Uri         = ($Url + "api/now/table/incident/fec7a7a91ba761504e2afeee034bcba8");
    Body        = $SetRecord | ConvertTo-Json;
    Headers     = $SnowSessionHeader;
    ContentType = "application/json"
}

Invoke-RestMethod @InvokeRestMethodParams


# custom fields lookup
$RitmNum = 'RITM0157839'
$RitmNum = 'RITM0260967'
$Ritm = Get-ITDServiceNowRecord -ItemType 'Request Item' -Number $RitmNum

$params = @{
    Method      = 'Get';
    Uri         = ('https://northdakota.service-now.com/api/now/table/sc_item_option_mtom?request_item=' + $Ritm.Sys_id.value + '&sysparm_limit=1000');
    Headers     = $SNOWSessionHeader;
    ContentType = "application/json"
}
$CustomFieldsLookup = (Invoke-RestMethod @params).result

# get each custom field individually
$sc_item_options = ForEach ($CustomField in $CustomFieldsLookup) {
    #$scitemsysid = $sc_item_option.sc_item_option.value
    $params = @{
        Method      = 'Get';
        Uri         = ("https://northdakota.service-now.com/api/now/table/sc_item_option?sys_id=" + $CustomField.sc_item_option.value ); #+ "&sysparm_limit=100"
        Headers     = $SNOWSessionHeader;
        ContentType = "application/json"
    }
    (Invoke-RestMethod @params).result
}

$MyArrayList = [System.Collections.ArrayList]@()
ForEach ($sc_item_option in $sc_item_options) {
    $params = @{
        Method      = 'Get';
        Uri         = ("https://northdakota.service-now.com/api/now/table/item_option_new?sys_id=" + $sc_item_option.item_option_new.value);
        Headers     = $SNOWSessionHeader;
        ContentType = "application/json"
    }
    $vars = (Invoke-RestMethod @params).result
    $obj = [PSCustomObject]@{
        #sc_item_option_sysid = $sc_item_option.sys_id
        #item_option_new_sysid = $vars.sys_id
        name          = $vars.name
        question_text = $vars.question_text
        value         = $sc_item_option.value
        type          = $vars.type
        # YES_NO = 1; MULTI_LINE_TEXT = 2; MULTIPLE_CHOICE = 3; NUMERIC_SCALE = 4; SELECT_BOX = 5; SINGLE_LINE_TEXT = 6; CHECKBOX = 7; REFERENCE = 8; DATE = 9; DATE_TIME = 10; LABEL = 11; BREAK = 12; MACRO = 14; UI_PAGE = 15; WIDE_SINGLE_LINE_TEXT = 16; MACRO_WITH_LABEL = 17; LOOKUP_SELECT_BOX = 18; CONTAINER_START = 19; CONTAINER_END = 20; LIST_COLLECTOR = 21; LOOKUP_MULTIPLE_CHOICE = 22; HTML = 23; SPLIT = 24; MASKED = 25;
    }
    $null = $MyArrayList.Add($obj)
}
#$Ritm | Add-Member -MemberType NoteProperty -Name CustomFields -Value $MyArrayList


#######################################
$Ritm | Add-Member @{
    'CustomVariable' = [pscustomobject]@{}
}

$InvokeRestMethodParams = @{
    Method      = 'Get';
    Uri         = ($Url + "/api/now/table/sc_item_option_mtom");
    Body        = @{
        request_item   = $Ritm.sys_id;
        sysparm_fields = (@('sc_item_option.item_option_new.name', 
                'sc_item_option.value', 
                'sc_item_option.item_option_new.type', 
                'sc_item_option.item_option_new.question_text', 
                'sc_item_option.item_option_new.reference') -join ',');
        sysparm_query  = "request_item=dd02ed854744bd18baa37834846d43fb^sc_item_option.item_option_new.typeIN1,2,3,4,5,6,7,8,9,10,16,18,21,22,26"
        
    };
    ContentType = 'application/json';
    Headers     = $SNOWSessionHeader;    
}

$customVars = (Invoke-RestMethod @InvokeRestMethodParams).result #-ov c

ForEach ($var in $customVars) {
    $newVar = [pscustomobject] @{
        Value       = $var.'sc_item_option.value'
        DisplayName = $var.'sc_item_option.item_option_new.question_text'
        Type        = $var.'sc_item_option.item_option_new.type'
    }
    
    # show the underlying value if the option is a reference type
    <#if ($newVar.Type -eq 'Reference' ) {
        $newVar.Value = (Get-ServiceNowRecord -Table $var.'sc_item_option.item_option_new.reference' -ID $var.'sc_item_option.value' -Property name -AsValue -ServiceNowSession $ServiceNowSession)
    }#>
    $RITM.CustomVariable | Add-Member @{ $var.'sc_item_option.item_option_new.name' = $newVar }
}



request_item=dd02ed854744bd18baa37834846d43fb^sc_item_option.item_option_new.typeIN1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 18, 21, 22, 26






#################################################################


41e3290a1b1aed14128ec806604bcb50
$params = @{
    Method      = 'Get';
    Uri         = ("https://northdakotatest.service-now.com/api/now/table/sc_item_option?sys_id=" + '41e3290a1b1aed14128ec806604bcb50' ); #+ "&sysparm_limit=100"
    Headers     = $SNOWSessionHeader;
    ContentType = "application/json"
}
(Invoke-RestMethod @params).result


#get standard change template
$AllChangeTemplateStandard = Invoke-RestMethod -Method Get -Uri ($Url + "api/sn_chg_rest/change/standard/template?sysparm_query=active=true") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type
$AllChangeTemplateStandard = Invoke-RestMethod -Method Get -Uri ($Url + "api/sn_chg_rest/change/standard/template?sysparm_query=active=true^name=$Name") -Headers $SnowSessionHeader -ContentType $Type
$SearchResult = $AllChangeTemplateStandard.result | Where-Object { $_.Name.display_value -eq $StdChangeTemplateName }


# update record
$Number = 'CHG0098990'
Invoke-RestMethod -Method GET -Uri ($Url + "api/now/table/change_request/41b66f1e1b5af5104e2afeee034bcb97") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov x
$Values = @{
    short_description = 'this is a new description'
}
$Body = $Values | ConvertTo-Json
Invoke-RestMethod -Method Patch -Uri ($Url + "api/now/table/change_request/41b66f1e1b5af5104e2afeee034bcb97") -Credential $SNowVMCred -Headers $SnowSessionHeader -ContentType $Type -ov x -Body $body

# date/time current time
[DateTime]::UtcNow.ToString('yyyy-MM-dd HH:mm:ss');
(Get-Date -AsUTC).ToString('yyyy-MM-dd HH:mm:ss')




# submit service catalog request
$SysId = 'a490f76adbc0e8901b47105f68961941' #generic service request test
$CommentsFieldExample = @"
Create nd.gov Active Directory service account for use by ITD System Administrators:

{
  "PasswordstateTitle": "itdzmtest99.nd.gov",
  "PasswordstateList": "CSRC",
  "SamAccountName": "svczmtest99",
  "Description": "description for things"
}
"@

# submit catalog request, the powershell way
$BodyJson | ConvertFrom-Json

$BodyObj = [PSCustomObject]@{
    sysparm_quantity = "1";
    variables        = [PSCustomObject]@{
        v_user_phone               = "(701) 328-4171";
        v_requested_by             = "206d9e091b8898102653997fbd4bcbd4";
        v_approval_department_code = "112.0";
        requester_information      = "true";
        v_container_requested_for  = "true";
        v_manager                  = "1c1d16451b8898102653997fbd4bcb3b";
        v_requested_for            = "206d9e091b8898102653997fbd4bcbd4";
        v_type                     = "Server Systems/Hosting";
        additional_comments        = "comments";
        v_user_in_servicenow       = "Yes";
        v_approval_division        = "f40758231b321450bba0113fad4bcb2d";
        v_container_requested_by   = "true";
        approval_information       = "true";
        v_approval_division_code   = "32";
        request_commnets           = "true";
        v_user_email               = "zmeier@nd.gov";
        request_information        = "true";
        v_alt_contact              = "";
        v_approval_department      = "f3c65cef1bfed050bba0113fad4bcb1d";
        v_approval_charge_code     = "";
    }
}
$NewJson = $BodyObj | ConvertTo-Json
$InvokeRestMethodParams = @{
    Method      = 'Post';
    Uri         = "https://northdakotatest.service-now.com/api/sn_sc/servicecatalog/items/a490f76adbc0e8901b47105f68961941/order_now";
    Credential  = $SNowVMCred;
    Headers     = $SNOWSessionHeader;
    ContentType = $Type;
    Body        = $NewJson  #'{"sysparm_quantity":"1","variables":{"v_user_phone":"(701) 328-4171","v_requested_by":"206d9e091b8898102653997fbd4bcbd4","v_approval_department_code":"112.0","requester_information":"true","v_container_requested_for":"true","v_manager":"1c1d16451b8898102653997fbd4bcb3b","v_requested_for":"206d9e091b8898102653997fbd4bcbd4","v_type":"Server Systems/Hosting","additional_comments":"moar comments!!2!","v_user_in_servicenow":"Yes","v_approval_division":"f40758231b321450bba0113fad4bcb2d","v_container_requested_by":"true","approval_information":"true","v_approval_division_code":"32","request_commnets":"true","v_user_email":"zmeier@nd.gov","request_information":"true","v_alt_contact":"","v_approval_department":"f3c65cef1bfed050bba0113fad4bcb1d","v_approval_charge_code":""},"sysparm_item_guid":"05adfdcf1b96bd104e2afeee034bcb1d","get_portal_messages":"true","sysparm_no_validation":"true","engagement_channel":"sp","referrer":null}'
}
Invoke-RestMethod @InvokeRestMethodParams -OutVariable e





# new vm form and custom variables
$RitmNum = 'RITM0233555'
$Ritm = Get-ITDServiceNowRecord -ItemType 'Request Item' -Number $RitmNum

$params = @{
    Method      = 'Get';
    Uri         = ('https://northdakotadev.service-now.com/api/now/table/sc_item_option_mtom?request_item=' + $Ritm.Sys_id + '&sysparm_limit=1000');
    Headers     = $SNOWSessionHeader;
    ContentType = "application/json"
}
$CustomFieldsLookup = (Invoke-RestMethod @params).result

# get each custom field individually
$sc_item_options = ForEach ($CustomField in $CustomFieldsLookup) {
    #$scitemsysid = $sc_item_option.sc_item_option.value
    $params = @{
        Method      = 'Get';
        Uri         = ("https://northdakotadev.service-now.com/api/now/table/sc_item_option?sys_id=" + $CustomField.sc_item_option.value ); #+ "&sysparm_limit=100"
        Headers     = $SNOWSessionHeader;
        ContentType = "application/json"
    }
    (Invoke-RestMethod @params).result
}

$MyArrayList = [System.Collections.ArrayList]@()
ForEach ($sc_item_option in $sc_item_options) {
    $params = @{
        Method      = 'Get';
        Uri         = ("https://northdakotadev.service-now.com/api/now/table/item_option_new?sys_id=" + $sc_item_option.item_option_new.value);
        Headers     = $SNOWSessionHeader;
        ContentType = "application/json"
    }
    $vars = (Invoke-RestMethod @params).result
    $obj = [PSCustomObject]@{
        #sc_item_option_sysid = $sc_item_option.sys_id
        #item_option_new_sysid = $vars.sys_id
        name          = $vars.name
        question_text = $vars.question_text
        value         = $sc_item_option.value
        type          = $vars.type
        # YES_NO = 1; MULTI_LINE_TEXT = 2; MULTIPLE_CHOICE = 3; NUMERIC_SCALE = 4; SELECT_BOX = 5; SINGLE_LINE_TEXT = 6; CHECKBOX = 7; REFERENCE = 8; DATE = 9; DATE_TIME = 10; LABEL = 11; BREAK = 12; MACRO = 14; UI_PAGE = 15; WIDE_SINGLE_LINE_TEXT = 16; MACRO_WITH_LABEL = 17; LOOKUP_SELECT_BOX = 18; CONTAINER_START = 19; CONTAINER_END = 20; LIST_COLLECTOR = 21; LOOKUP_MULTIPLE_CHOICE = 22; HTML = 23; SPLIT = 24; MASKED = 25;
    }
    $null = $MyArrayList.Add($obj)
}

$params = @{
    Method      = 'Get';
    Uri         = ($Url + '/api/now/table/sc_item_option?sys_id=624e6fef47244610b7853238436d43a9');
    Headers     = $SNOWSessionHeader;
    ContentType = 'application/json'
}
$x = Invoke-RestMethod @params



$params = @{
    Method      = 'Get';
    Uri         = ($Url + '/api/now/table/item_option_new_set?sys_id=5939ba3b47b04a90b7853238436d4372');
    Headers     = $SNOWSessionHeader;
    ContentType = 'application/json'
}
$x = Invoke-RestMethod @params







#variable set lookup scratch
$params = @{
    Method      = 'Get';
    Uri         = ('https://northdakotadev.service-now.com/api/now/table/sc_req_item?sys_id=' + '3b94e3f1874e0a14a5aacbb6dabb35ac' + '&sysparm_limit=1000');
    Headers     = $SNOWSessionHeader;
    ContentType = "application/json"
}
$x = (Invoke-RestMethod @params)

$params = @{
    Method      = 'Get';
    Uri         = ('https://northdakotadev.service-now.com/api/now/table/item_option_new_set?sys_id=' + '5939ba3b47b04a90b7853238436d4372' + '&sysparm_limit=1000');
    Headers     = $SNOWSessionHeader;
    ContentType = "application/json"
}
$a = (Invoke-RestMethod @params).result

$params = @{
    Method      = 'Get';
    Uri         = ('https://northdakotadev.service-now.com/api/now/table/sc_cat_item');
    Headers     = $SNOWSessionHeader;
    ContentType = "application/json"
}
$b = (Invoke-RestMethod @params).result
$c = $b | Where-Object sys_id -EQ 'c64e27af47244610b7853238436d435d'


$params = @{
    Method      = 'Get';
    Uri         = ('https://northdakotadev.service-now.com/api/now/table/item_option_new_set_list');
    Headers     = $SNOWSessionHeader;
    ContentType = "application/json"
}
$d = (Invoke-RestMethod @params).result

$params = @{
    Method      = 'Get';
    Uri         = ('https://northdakotadev.service-now.com/api/now/table/sc_multi_row_question_answer');
    Headers     = $SNOWSessionHeader;
    ContentType = "application/json"
}
$e = (Invoke-RestMethod @params).result


<#
    sc_req_item --> sc_multi_row_question_answer.parent_id
#>
$RitmNum = 'RITM0233555'
$RitmNum = 'RITM0231641'
$Ritm = Get-ITDServiceNowRecord -ItemType 'Request Item' -Number $RitmNum

$params = @{
    Method      = 'Get';
    Uri         = ('https://northdakotadev.service-now.com/api/now/table/sc_multi_row_question_answer?parent_id=' + $Ritm.sys_id);
    Headers     = $SNOWSessionHeader;
    ContentType = "application/json"
}
$AllRows = (Invoke-RestMethod @params).result

#$AllRows | Group-Object row_index ####### USE THIS TO SEPARATE EACH ROW ENTRY

#item_option gets value
#vars gets name, type, question_text
$Row_Indexes = ($AllRows | Select-Object -Unique row_index).row_index
$ArrayList = [System.Collections.ArrayList]@()
ForEach ($Row in $Row_Indexes) {
    $RowProperties = $AllRows | Where-Object row_index -EQ $Row
    
    $obj = [PSCustomObject]@{
    }
    ForEach ($Property in $RowProperties) {
        $params = @{
            Method      = 'Get';
            Uri         = ("https://northdakotadev.service-now.com/api/now/table/item_option_new?sys_id=" + $Property.item_option_new.value);
            Headers     = $SNOWSessionHeader;
            ContentType = "application/json"
        }
        $vars = (Invoke-RestMethod @params).result

        $obj | Add-Member -MemberType NoteProperty -Name $vars.name -Value $Property.value

    }
    $null = $ArrayList.Add($obj)
}



$params = @{
    Method = 'Get';
    Uri = ();
    Headers = $SNOWSessionHeader;
    ContentType = "application/json"
}

$CmdbCi = Get-ITDServiceNowRecord -Table cmdb_ci -SysId '4ac36cd11b0154509d7ada01dd4bcbdb'


$params = @{
    Method = 'Get';
    Uri = "https://northdakota.service-now.com/api/now/table/sys_history_set?sys_id=" + 'ebb4a8cddbbf0254c4582fcb139619b9';
    Headers = $SNOWSessionHeader;
    ContentType = 'application/json'
}
Invoke-RestMethod @params -ov z



#### cmdb key values POC
Get-ITDServiceNowRecord -Table 'cmdb_ci_win_server' -Filter @{name = 'itddotrtp2' }
$z = Get-ITDServiceNowRecord -Table 'cmdb_key_value' -Filter @{name = 'itddotrtp2' }

$ComputerName = 'itddotrtp2'
$CmdbCi = Get-ITDServiceNowRecord -Table 'cmdb_ci_server' -Filter ("name=$ComputerName")
$KeyValues = Get-ITDServiceNowRecord -Table 'cmdb_key_value' -Filter ('configuration_item=' + $CmdbCi.sys_id.value)
$KeyValues | Select-Object {$_.configuration_item.display_value},{$_.key.display_value},{$_.value.display_value}

#   https://northdakotadev.service-now.com/now/nav/ui/classic/params/target/cmdb_key_value.do%3Fsys_id%3D31f4620bc38496505bc7d685e00131ac%26sysparm_record_target%3Dcmdb_key_value%26sysparm_record_row%3D2%26sysparm_record_rows%3D5%26sysparm_record_list%3Dconfiguration_item%253D67ba954bc30c121046637badc001311c
#   https://northdakotadev.service-now.com/now/nav/ui/classic/params/target/cmdb_key_value.do%3Fsys_id%3D31f4620bc38496505bc7d685e00131ab%26sysparm_record_target%3Dcmdb_key_value%26sysparm_record_row%3D1%26sysparm_record_rows%3D5%26sysparm_record_list%3Dconfiguration_item%253D67ba954bc30c121046637badc001311c