Private/CP/Invoke-CPApiRequest.ps1
|
function Invoke-CPApiRequest { [CmdletBinding()] param( [Parameter(Mandatory)] [String]$ResourcePath, [ValidateSet('GET', 'POST', 'PATCH', 'PUT', 'DELETE')] [String]$Method = 'GET', [Hashtable]$QueryParameters, $Body, [String]$ItemPropertyName, [String]$TypeName, [System.Management.Automation.PSCmdlet]$CallerPSCmdlet, [System.Management.Automation.InvocationInfo]$Command ) $headers = New-CPHeader -Auth $Script:CPAuth -Method $Method $uri = Join-CPUri -PortalUrl $Script:CPAuth.PortalUrl -ResourcePath $ResourcePath -QueryString (New-CPQueryString -Parameters $QueryParameters) $jsonBody = $null if ($PSBoundParameters.ContainsKey('Body') -and $null -ne $Body) { $jsonBody = ConvertTo-CPJsonBody -InputObject $Body } if ($Command) { Resolve-CPDebugInfo -Url $uri -Headers $headers -Command $Command -Payload $jsonBody } $invokeParams = @{ Uri = $uri Method = $Method Headers = $headers Auth = $Script:CPAuth EnableDebugLogging = ($DebugPreference -ne 'SilentlyContinue') CallerPSCmdlet = $CallerPSCmdlet } if ($jsonBody) { $invokeParams.Body = $jsonBody } $response = Invoke-CPRestMethod @invokeParams if ($ItemPropertyName) { $page = Get-CPResponseItems -Response $response -ItemPropertyName $ItemPropertyName if ($page.Items.Count -eq 0) { Write-Output @() -NoEnumerate return } if ($TypeName) { if ($page.Items.Count -eq 1) { return (Add-ObjectTypeInfo -InputObject $page.Items[0] -TypeName $TypeName) } return (Add-ObjectTypeInfo -InputObject $page.Items -TypeName $TypeName) } return $page.Items } $data = Get-CPResponseData -Response $response if ($null -eq $data) { return } if ($TypeName) { return (Add-ObjectTypeInfo -InputObject $data -TypeName $TypeName) } return $data } |