Private/ConvertTo-IntuneGroupInfo.ps1

function ConvertTo-IntuneGroupInfo {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory, ValueFromPipeline)]
        [object]$Group
    )

    process {
        $groupTypes = @($Group.groupTypes)
        $isMicrosoft365 = $groupTypes -contains 'Unified'
        $isDynamic = $groupTypes -contains 'DynamicMembership'
        $mailEnabled = $Group.mailEnabled -eq $true
        $securityEnabled = $Group.securityEnabled -eq $true

        # Microsoft Graph documents groupTypes, mailEnabled, and
        # securityEnabled as the canonical group-type discriminators.
        $groupType = if ($isMicrosoft365) {
            'Microsoft 365'
        }
        elseif ($mailEnabled -and $securityEnabled) {
            'Mail-enabled Security'
        }
        elseif ($securityEnabled) {
            'Security'
        }
        elseif ($mailEnabled) {
            'Distribution'
        }
        else {
            'Unknown'
        }

        [PSCustomObject]@{
            Id                = $Group.id
            DisplayName       = $Group.displayName
            GroupType         = $groupType
            MembershipType    = if ($isDynamic) { 'Dynamic' } else { 'Assigned' }
            IsMicrosoft365    = $isMicrosoft365
            Mail              = $Group.mail
            GroupTypes        = $groupTypes
            MailEnabled       = $mailEnabled
            SecurityEnabled   = $securityEnabled
            Success           = -not [string]::IsNullOrWhiteSpace([string]$Group.id)
        }
    }
}