Private/ConvertTo-EgmGroupInfo.ps1
|
function ConvertTo-EgmGroupInfo { <# .SYNOPSIS Converts a raw Get-MgUserMemberOf directory object into a classified group record. #> [CmdletBinding()] param( [Parameter(Mandatory, ValueFromPipeline)] [object]$DirectoryObject ) process { $p = $DirectoryObject.AdditionalProperties if ($p['@odata.type'] -ne '#microsoft.graph.group') { return } $groupTypes = @($p['groupTypes']) $isDynamic = $groupTypes -contains 'DynamicMembership' $isUnified = $groupTypes -contains 'Unified' $mail = [bool]$p['mailEnabled'] $sec = [bool]$p['securityEnabled'] $onPrem = [bool]$p['onPremisesSyncEnabled'] $kind = if ($isUnified) { 'M365 group' } elseif ($mail -and $sec) { 'Mail-enabled security' } elseif ($mail) { 'Distribution list' } else { 'Security group' } # Dynamic and on-prem-synced memberships cannot be written in the cloud; # distribution lists and mail-enabled security groups only via Exchange Online. $route = if ($isDynamic) { 'SkipDynamic' } elseif ($onPrem) { 'SkipOnPrem' } elseif ($mail -and -not $isUnified) { 'Exchange' } else { 'Graph' } [pscustomobject]@{ Id = $DirectoryObject.Id Name = [string]$p['displayName'] Kind = $kind Route = $route IsDynamic = $isDynamic OnPremSynced = $onPrem } } } |