Public/Get-EntraIDAccessTokenHasRoles.ps1

<#
.SYNOPSIS
Get a boolean indicating whether the input access token has all or any of the specified roles.

.DESCRIPTION
Get a boolean indicating whether the input access token has all or any of the specified roles.

.EXAMPLE
    PS> Get-EntraIDAccessToken |Get-EntraIDAccessTokenHasRoles -Roles "Group.Create"

.EXAMPLE
    PS> Get-EntraIDAccessToken |Get-EntraIDAccessTokenHasRoles -Roles "Group.Create", "Group.ReadWrite.All" -Any
#>

function Get-EntraIDAccessTokenHasRoles {
    [CmdletBinding(DefaultParameterSetName = "All")]

    Param(
        [Parameter(Mandatory = $true)]
        [String[]] $Roles,

        [Parameter(Mandatory = $true, ParameterSetName = "Any")]
        [Switch] $Any,

        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [String] $AccessToken
    )

    Process {
        $Payload = $AccessToken | Get-EntraIDAccessTokenPayload

        if($Any.IsPresent) {
            return !!($Roles | Where-Object {$Payload.roles -contains $_})
        }

        return !($Roles | Where-Object {$Payload.roles -notcontains $_})
    }
}