Private/Request-Api.ps1
function Request-Api { [CmdletBinding()] param ( [Parameter()] [ValidateNotNullOrEmpty()] [string]$Method = "GET", [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Uri, [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [object]$Headers, [Parameter()] [ValidateNotNullOrEmpty()] [object]$Body ) Begin { Write-Verbose "Requesting url $Uri with method $Method" $resultObject = [System.Collections.ArrayList]::new() } Process { try { $parameters = @{ Uri = $Uri Method = $Method Headers = $Headers } if ($Body) { $parameters.Add("Body", $Body) > $null } $results = (Invoke-WebRequest @parameters) | ConvertFrom-Json $resultObject = $results.value if ($null -eq $results.value) { $resultObject = $results } while (($null -ne $results."@odata.nextLink")) { $pagingUrl = $results."@odata.nextLink" Write-Verbose "Fetching odata.nextLink: $pagingUrl" $results = (Invoke-WebRequest -Uri $pagingUrl -Method $Method -Headers $Headers) | ConvertFrom-Json foreach ($value in $results.content.value) { $resultObject.Add($value) > $null } } } catch [System.Exception] { Write-Error -Message "An error occurred while requesting url $uri. Error message: $($PSItem.Exception.Message)" } } End { return $resultObject } } |