Private/RoleManagement/Add-TypeSpecificProperties.ps1

function Add-TypeSpecificProperties {
    param($FormattedRole, $SourceRole)
    
    switch ($SourceRole.Type) {
        'Entra' {
            $FormattedRole | Add-Member -NotePropertyName 'DirectoryScopeId' -NotePropertyValue $SourceRole.DirectoryScopeId
            $FormattedRole | Add-Member -NotePropertyName 'SubscriptionId' -NotePropertyValue $null
        }
        'Group' {
            $FormattedRole | Add-Member -NotePropertyName 'DirectoryScopeId' -NotePropertyValue $null
            $FormattedRole | Add-Member -NotePropertyName 'SubscriptionId' -NotePropertyValue $null
            $accessId = if ($SourceRole.PSObject.Properties['AccessId'] -and $SourceRole.AccessId) {
                $SourceRole.AccessId
            }
            elseif ($SourceRole.PSObject.Properties['Assignment'] -and $SourceRole.Assignment -and $SourceRole.Assignment.PSObject.Properties['AccessId'] -and $SourceRole.Assignment.AccessId) {
                $SourceRole.Assignment.AccessId
            }
            elseif ($SourceRole.PSObject.Properties['MemberType'] -and $SourceRole.MemberType -in @('member', 'owner')) {
                $SourceRole.MemberType
            }
            else {
                $null
            }
            $FormattedRole | Add-Member -NotePropertyName 'AccessId' -NotePropertyValue $accessId
        }
        default {
            # Future Azure resource roles
            $FormattedRole | Add-Member -NotePropertyName 'DirectoryScopeId' -NotePropertyValue $null
            $FormattedRole | Add-Member -NotePropertyName 'SubscriptionId' -NotePropertyValue $null
        }
    }
}