Private/Invoke-ApiRequest.ps1
function Invoke-ApiRequest { [OutputType([System.Collections.Hashtable])] [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string] $Uri, [Parameter(Mandatory = $true)] [string] $Method, [Parameter(Mandatory = $false)] [PSObject] $Headers, [Parameter(Mandatory = $false)] [string] $ContentType = 'application/json', [Parameter(Mandatory = $false)] [PSObject] $Body, [Parameter(Mandatory = $false)] [int] $TimeoutSec = 10 ) if ($PSVersionTable.PSVersion.Major -lt 7) { $request = try { Invoke-WebRequest -UseBasicParsing -Uri $Uri -Method $Method -Headers $Headers -ContentType $ContentType -TimeoutSec $TimeoutSec -Body $Body} catch { $_.Exception.Response } } else { $request = Invoke-WebRequest -UseBasicParsing -Uri $Uri -Method $Method -Headers $Headers -ContentType $ContentType -TimeoutSec $TimeoutSec -Body $Body -SkipHttpErrorCheck } $r = @{ Body = $null StatusCode = 0 IsJson = $false } if ($request -is [System.Net.HttpWebResponse]) { $sr = New-Object System.IO.StreamReader($request.GetResponseStream()) $sr.BaseStream.Position = 0 $sr.DiscardBufferedData() $r.Body = $sr.ReadToEnd() $r.StatusCode = [int][System.Net.HttpStatusCode]::($request.StatusCode) $sr.Close() } else { $r.Body = $request $r.StatusCode = $request.StatusCode } try { $jsonObject = $r.Body | ConvertFrom-Json $r.Body = $jsonObject $r.IsJson = $true } catch { Write-Debug "Failed Json conversion" } return $r } |