functions/Invoke-RGBatchRequest.ps1
|
function Invoke-RGBatchRequest { param ( [uri] $Uri, [hashtable] $Query, [int]$Limit ) 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.Value)) { $QueryString += "{0}={1}" -f $Parameter.Name, $Parameter.Value } } } if ($null -ne $Limit) { $QueryString += "limit={0}" -f $Limit } $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 $response.$RootObject $lastResponse = $response if ([bool]($response.PSobject.Properties.name -match "limit") -and ($response.$RootObject.Length -gt 0) -and ($response.total_count -gt $response.limit)) { $offset += $lastResponse.limit } else { $MorePages = $false } } } } |