Private/New-FlatDriftResultList.ps1

# Flattens the nested ManagementGroup/Subscription drift result into a single table for Html/Csv export
function New-FlatDriftResultList {
    <#
    .SYNOPSIS
        Flattens nested ManagementGroup/Subscription drift results into a single table.
    #>

    [CmdletBinding()]
    param(
        [System.Collections.Specialized.OrderedDictionary]$DriftResult
    )

    $flat_diff = @()

    foreach ($section in 'ManagementGroup', 'Subscription') {
        foreach ($id in $DriftResult[$section].Keys) {
            foreach ($entry in $DriftResult[$section][$id]) {
                $flat_diff += [PSCustomObject]@{
                    Section            = $section
                    ScopeId            = $id
                    Status             = $entry.Status
                    SuggestedAction    = $entry.SuggestedAction
                    Scope              = $entry.Assignment.Scope
                    DisplayName        = $entry.Assignment.DisplayName
                    SignInName         = $entry.Assignment.SignInName
                    ObjectId           = $entry.Assignment.ObjectId
                    ObjectType         = $entry.Assignment.ObjectType
                    RoleDefinitionName = $entry.Assignment.RoleDefinitionName
                }
            }
        }
    }

    return $flat_diff
}