GraphAPI_utils.ps1

# This script contains utility functions for Graph API at https://graph.windows.net
# Office 365 / Azure AD v2, a.k.a. AzureAD module uses this API



# Calls the provisioning SOAP API
function Call-GraphAPI
{
    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$True)]
        [String]$AccessToken,
        [Parameter(Mandatory=$True)]
        [String]$Command,
        [Parameter(Mandatory=$False)]
        [String]$ApiVersion="1.61-internal",
        [Parameter(Mandatory=$False)]
        [ValidateSet('Put','Get','Post','Delete','Patch')]
        [String]$Method="Get",
        [Parameter(Mandatory=$False)]
        $Body,
        [Parameter(Mandatory=$False)]
        $Headers,
        [Parameter(Mandatory=$False)]
        [String]$QueryString
    )
    Process
    {
        # Set the required variables
        $TenantID = (Read-Accesstoken $AccessToken).tid

        if($Headers -eq $null)
        {
            $Headers=@{}
        }
        $Headers["Authorization"] = "Bearer $AccessToken"

        if([string]::IsNullOrEmpty($Headers["User-Agent"]))
        {
            $Headers["User-Agent"] = Get-UserAgent
        }

        # Call the API
        $response = Invoke-RestMethod -UseBasicParsing -Uri "https://graph.windows.net/$TenantId/$Command`?api-version=$ApiVersion$(if(![String]::IsNullOrEmpty($QueryString)){"&$QueryString"})" -ContentType "application/json; charset=utf-8; odata.metadata=none" -Method $Method -Body $Body -Headers $Headers -ErrorAction SilentlyContinue

        # Return
        if($response.value)
        {
            return $response.value 
        }
        else
        {
            return $response
        }

    }
}