Collectors/Groups.ps1

@{
    Name           = 'Groups'
    FileName       = 'groups'
    ApiVersion     = 'v1.0'
    RequiredScopes = @('Directory.Read.All')
    Description    = 'Groups inventory: ownership, visibility, dynamic membership rules, Teams-connected groups.'
    Collect        = {
        $groups = @(Invoke-TLGraphRequest -Uri '/v1.0/groups?$select=id,displayName,groupTypes,securityEnabled,mailEnabled,visibility,membershipRule,resourceProvisioningOptions,createdDateTime&$expand=owners($select=id,displayName)' -All)

        $unifiedCount = 0; $ownerlessUnified = 0; $publicUnified = 0; $dynamicCount = 0; $teamCount = 0
        foreach ($group in $groups) {
            $isUnified = [bool](@($group.groupTypes) -contains 'Unified')
            $isDynamic = [bool](@($group.groupTypes) -contains 'DynamicMembership')
            $isTeam = [bool](@($group.resourceProvisioningOptions) -contains 'Team')
            $ownerCount = @($group.owners).Count

            Add-Member -InputObject $group -NotePropertyName '_tlIsUnified' -NotePropertyValue $isUnified -Force
            Add-Member -InputObject $group -NotePropertyName '_tlIsDynamic' -NotePropertyValue $isDynamic -Force
            Add-Member -InputObject $group -NotePropertyName '_tlIsTeam' -NotePropertyValue $isTeam -Force
            Add-Member -InputObject $group -NotePropertyName '_tlOwnerCount' -NotePropertyValue $ownerCount -Force

            if ($isUnified) {
                $unifiedCount++
                if ($ownerCount -eq 0) { $ownerlessUnified++ }
                if ([string]$group.visibility -eq 'Public') { $publicUnified++ }
            }
            if ($isDynamic) { $dynamicCount++ }
            if ($isTeam) { $teamCount++ }
        }

        @{
            summary = [ordered]@{
                total            = @($groups).Count
                unified          = $unifiedCount
                ownerlessUnified = $ownerlessUnified
                publicUnified    = $publicUnified
                dynamic          = $dynamicCount
                teams            = $teamCount
            }
            groups  = $groups
        }
    }
}