Functions/Get-DeletedUsers.ps1

Function Get-DeletedUsers{
<#
    .SYNOPSIS
        Retrieves a list of delete O365 users via MS Graph API.
 
    .DESCRIPTION
        Retrieves a list of delete O365 users via MS Graph API.
 
    .EXAMPLE
        $AccessToken = Get-AGGraphAccessToken -TenantID $TenantID -ClientID $ClientId -ClientSecret $ClientSecret
        $Details = Get-DeletedUsers -AccessToken $AccessToken
         
        This command first get an access token, which is used to grant access to Graph, and then a list of deleted users is retrieved.
         
    .EXAMPLE
        $Details = Get-DeletedUsers
         
        This command uses an existing access token, and then a list of deleted users is retrieved.
         
    .PARAMETER AccessToken
        This is the AccessToken that grants you access to MS Graph.
 
    .INPUTS
        Input is from command line or called from a script.
 
    .OUTPUTS
        This will output a list of groups.
 
    .NOTES
        Author: Lars Panzerbjørn
        Creation Date: 2021.08.23
#>

    [CmdletBinding()]
    param
    (
        [Parameter()][psobject]$AccessToken
    )
    BEGIN{
        IF (($AccessToken) -or ($TokenResponse)){
            IF($AccessToken){$Headers = @{Authorization = "Bearer $($AccessToken.access_token)"}}
            IF(!($AccessToken)){$Headers = @{Authorization = "Bearer $($TokenResponse.access_token)"}}
        }
        ELSE {THROW "Please provide access token"}
        
        $BaseURI = "https://graph.microsoft.com/beta"
        $ExpandedURI = "/directory/deleteditems/microsoft.graph.user?`$format=application/json"
        $URI = $BaseURI + $ExpandedURI
    }
    PROCESS{
        $Result = Invoke-RestMethod -Uri $URI -Headers $Headers
        
        $Resources = $Result.value
        IF (!([string]::IsNullOrEmpty($Result.'@odata.nextLink'))){
            $Page = 1
            DO{
                Write-Verbose "Page $($Page)"
                $URI = $Result.'@odata.nextLink'
                $Result = Invoke-RestMethod -Uri $URI -Headers $Headers
                $Resources += $Result.value
                Write-Verbose "There are $($Resources.count) resources"
                $Page++
            }
            UNTIL ($Result.'@odata.nextLink' -eq $Null)
        }
        Write-Verbose "There are $($Resources.count) resources"

    }
    END{
        Return $Resources
    }
}