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 } } } |