Private/Groups.SecurityDistribution.ps1
|
function Get-M365SnapshotSecurityAndDistributionGroups { param( [Parameter(Mandatory=$false)] [AllowNull()] [hashtable]$GraphHeaders, [Parameter(Mandatory=$true)] [object[]]$Groups, [Parameter(Mandatory=$true)] [ValidateRange(1, [int]::MaxValue)] [int]$EffectiveMaxSecurityDistributionGroups, [Parameter(Mandatory=$true)] [switch]$ReturnObjects ) $securityGroups = @() $distributionGroups = @() try { foreach ($group in @($Groups)) { $groupTypesText = [string]$group.GroupTypes $isUnified = ($groupTypesText -match '(^|,\s*)Unified($|,\s*)') if ($isUnified) { continue } $isSecurityEnabled = [bool]$group.SecurityEnabled $isMailEnabled = [bool]$group.MailEnabled $groupRecord = [PSCustomObject]@{ DisplayName = $group.DisplayName PrimarySmtpAddress = $group.PrimarySmtpAddress GroupId = $group.GroupId MailEnabled = $isMailEnabled SecurityEnabled = $isSecurityEnabled GroupTypes = $group.GroupTypes OwnerCount = if ($null -ne $group.OwnerCount) { [int]$group.OwnerCount } else { $null } SharingType = $group.SharingType Label = $group.Label Site = $group.Site MemberCount = if ($null -ne $group.MemberCount) { [int]$group.MemberCount } else { $null } } if ($isSecurityEnabled) { $securityGroups += $groupRecord } if ($isMailEnabled -and -not $isSecurityEnabled) { $distributionGroups += $groupRecord } } $securityGroups = @($securityGroups | Select-Object -First $EffectiveMaxSecurityDistributionGroups) $distributionGroups = @($distributionGroups | Select-Object -First $EffectiveMaxSecurityDistributionGroups) if (-not $ReturnObjects) { Write-Host "[OK] Found $($securityGroups.Count) security group(s) and $($distributionGroups.Count) distribution group(s)`n" -ForegroundColor Green } } catch { if (-not $ReturnObjects) { Write-Host "[WARNING] Could not classify security/distribution groups: $($_.Exception.Message)`n" -ForegroundColor Yellow } } return [PSCustomObject]@{ SecurityGroups = @($securityGroups) DistributionGroups = @($distributionGroups) } } |