functions/Invoke-RGBatchRequest.ps1
|
function Invoke-RGBatchRequest { param ( [uri] $Uri, [hashtable[]] $Query ) Begin { $RootObject = (((($Uri -split '/' | Select-Object -Last 1) -split '\?') | Select-Object -First 1) -replace '.json', '') $lastResponse = $null $offset = 0; } Process { $QueryString = @() if ($null -ne $Query) { foreach ($Parameter in $Query.GetEnumerator()) { <# $currentItemName is the current item #> if (-not [string]::IsNullOrEmpty($Parameter.Name)) { $QueryString += "{0}={1}" -f $Parameter.Name, $Parameter.Value } } } $MorePages = $true; while ($MorePages) { $TempQueryString = $QueryString if ($offset -ne 0) { $TempQueryString += ("offset={0}" -f $offset) } $TempUrl = Get-RUri -Uri $Uri -Query $TempQueryString $response = Invoke-RGRequest -Method 'GET' -Uri $TempUrl if ($response.StatusCode -match '2*') { $response.$RootObject $lastResponse = $response } if ([bool]($response.PSobject.Properties.name -match "limit") -and ($response.$RootObject.Length -gt 0)) { $offset += $lastResponse.limit } else { $MorePages = $false } } } } |