private/Invoke-OneApiRequest.ps1
function Invoke-OneApiRequest { [cmdletbinding()] Param( [Parameter(Mandatory = $false)] [string] $ApiVersion = "beta", [Parameter(Mandatory = $true)] [string] $ApiResource, [Parameter(Mandatory = $true)] [Microsoft.PowerShell.Commands.WebRequestMethod] $ApiRequestMethod, [Parameter(Mandatory = $false)] [string] $ApiRequestBody ) begin { Write-Verbose "[$(Get-Date)] [BEGIN ] $($MyInvocation.MyCommand)" } process { $ApiRequest = @{ Uri = "https://graph.microsoft.com/$($ApiVersion)/$($ApiResource)" ContentType = "application/json" Headers = @{ Authorization = "Bearer $($OneShortcutSession.Token.AccessToken)" Prefer = "apiversion=2.1" } Method = $ApiRequestMethod } if ($ApiRequestBody) { $ApiRequest.Body = $ApiRequestBody } $Api = @{ Response = @{ StatusCode = $null Message = $null } Data = $null } try { Write-Verbose "[$(Get-Date)] [CALL ] Invoke-RestMethod($($ApiRequest.Uri), $($ApiRequest.ContentType), $($ApiRequest.Headers.Authorization), $($ApiRequest.Headers.Prefer), $($ApiRequest.Method), $($ApiRequest.Body))" $ApiResponse = (Invoke-WebRequest @ApiRequest) $ApiData = (ConvertFrom-Json $([String]::new($ApiResponse.Content))) $Api.Response.StatusCode = $ApiResponse.StatusCode $Api.Data = $ApiData } catch { $Api.Response.StatusCode = $_.Exception.Response.StatusCode.value__ $Api.Response.Message = $_.Exception.Message } return $Api } end { Write-Verbose "[$(Get-Date)] [END ] $($MyInvocation.MyCommand)" } } |