internal/functions/Resolve-SPGraphUserGroupMembership.ps1

function Resolve-SPGraphUserGroupMembership {
    <#
    .SYNOPSIS
        Resolves all user group memberships.
     
    .DESCRIPTION
        Resolves all user group memberships.
     
    .PARAMETER Identity
        UPN or ID of the user to resovle the group memebrships for.
     
    .PARAMETER Data
        Add groups to the hashtable specified.
        If this parameter is not specified, it will instead return them as objects.
 
    .PARAMETER LogLevel
        How detailed a log should be written.
     
    .EXAMPLE
        PS C:\> Resolve-SPGraphUserGroupMembership -Identity fred@contoso.onmicrosoft.com
 
        Resolves the group memberships for the user fred@contoso.onmicrosoft.com
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]
        $Identity,

        [Hashtable]
        $Data = @{ },

        [LogLevel]
        $LogLevel = 'Medium'
    )

    begin {
        $returnData = $PSBoundParameters.Keys -notcontains 'Data'
    }
    process {
        foreach ($membership in Invoke-EntraRequest -Path "users/$Identity/transitiveMemberOf") {
            if ($LogLevel -gt 0) { Write-PSFMessage -Message 'User {0} is in group {1} ({2})' -StringValues $Identity, $membership.DisplayName, $membership.ID }
            $Data[$membership.id] = [PSCustomObject]$membership
        }
        if ($returnData) {
            $Data.Values
        }
    }
}