param(
[parameter(Mandatory=$true)][String]$InstanceName,
[parameter(Mandatory=$true)][String]$Table,
[String]$Query,
[String]$Fields,
[Int32]$Limit,
[Switch]$SetCredential
)
Add-Type -AssemblyName System.Web
$InstanceName = -Join ("https://", $InstanceName, ".service-now.com/api/now/table/")
$Query = [System.Web.HttpUtility]::UrlEncode($Query)
$Fields = [System.Web.HttpUtility]::UrlEncode($Fields)
$LimitStr = -Join ("sysparm_limit=", $Limit.toString())
if ((-not $SetCredential) -and (Test-Path .\snow_cred.xml)){
$cred = Import-Clixml -Path .\snow_cred.xml
} else {
$cred = Get-Credential
$cred | Export-Clixml -Path .\snow_cred.xml
}
# build uri
$Uri = -Join ($InstanceName, $Table)
# optionally add query / limit / fields
if ($Query){
$Uri = -Join ($Uri, "?sysparm_query=", $Query)
}
if ($Limit){
if ($Query){
$Uri = -Join ($Uri, "&", $LimitStr)
} else {
$Uri = -Join ($Uri, "?", $LimitStr)
}
}
if ($Fields){
if ($Query -or $Limit){
$Uri = -Join ($Uri, "&sysparm_fields=", $Fields)
} else {
$Uri = -Join ($Uri, "?sysparm_fields=", $Fields)
}
}
#"Instance: " + $InstanceName
#"Table: " + $Table
#"Query: " + $Query
#"Limit: " + $Limit
#"Uri: " + $Uri
$response = Invoke-WebRequest -Method Get -Credential $cred -Uri $Uri -ProxyUseDefaultCredentials -Proxy 'https://example.com'
$Uri
if ($response.StatusCode -ne 200){
$response.StatusCode
} else {
$response.StatusCode.ToString() + " - " + $response.StatusDescription
$obj = $response.Content | ConvertFrom-Json
$obj.result
# $obj.result | ForEach-Object -Process { $_.name + " - " + $_.sys_class_name + " - " + $_.sys_created_by }
}