Private/ConvertTo-IACAssignmentRecord.ps1

function ConvertTo-IACAssignmentRecord {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)] [object]$Category,
        [Parameter(Mandatory)] [object]$Entity,
        [Parameter(Mandatory)] [object]$Assignment,
        [string]$SubjectType,
        [string]$SubjectId,
        [string]$SubjectName,
        [string]$Source = 'MicrosoftGraph',
        [switch]$ResolveTargetName
    )

    $policyName = if (-not [string]::IsNullOrWhiteSpace($Entity.displayName)) { $Entity.displayName }
        elseif (-not [string]::IsNullOrWhiteSpace($Entity.name)) { $Entity.name }
        else { 'Unnamed Policy' }

    $targetType = if ($Assignment.TargetType) { "$($Assignment.TargetType)" }
        else {
            switch ("$($Assignment.Reason)") {
                'All Users' { 'AllUsers' }
                'All Devices' { 'AllDevices' }
                'Group Assignment' { 'Group' }
                'Direct Assignment' { 'Group' }
                'Group Exclusion' { 'Group' }
                'Direct Exclusion' { 'Group' }
                'No Assignment' { 'None' }
                default { 'Unknown' }
            }
        }
    $assignmentMode = if ($Assignment.AssignmentMode) { "$($Assignment.AssignmentMode)" }
        elseif ($Assignment.Reason -in @('Group Exclusion', 'Direct Exclusion')) { 'Exclude' }
        elseif ($Assignment.Reason -eq 'No Assignment') { 'None' }
        else { 'Include' }
    $targetId = if ($Assignment.TargetId) { $Assignment.TargetId } else { $Assignment.GroupId }
    $targetName = switch ($targetType) {
        'AllUsers' { 'All Users' }
        'AllDevices' { 'All Devices' }
        'Group' {
            if ($ResolveTargetName -and $targetId) { (Get-GroupInfo -GroupId $targetId).DisplayName }
            else { $null }
        }
        default { $null }
    }
    $filter = if ($Assignment.FilterId -and $script:AssignmentFilterLookup -and $script:AssignmentFilterLookup.ContainsKey("$($Assignment.FilterId)")) {
        $script:AssignmentFilterLookup["$($Assignment.FilterId)"]
    }
    else { $null }
    $scopeTagIds = @($Entity.roleScopeTagIds | ForEach-Object { "$_" })
    $scopeTagNames = if ($scopeTagIds.Count -eq 0) { @('Default') }
        elseif ($null -eq $script:ScopeTagLookup) { @($scopeTagIds | ForEach-Object { "Tag:$_" }) }
        else { @((Get-ScopeTagNames -ScopeTagIds $scopeTagIds -ScopeTagLookup $script:ScopeTagLookup) -split ', ') }
    $categoryName = if ($Category.ExportCategory) { $Category.ExportCategory } else { $Category.DisplayName }

    New-IACAssignmentRecord `
        -CategoryId "$($Category.Id)" -Category "$categoryName" `
        -PolicyId "$($Entity.id)" -PolicyName $policyName `
        -Platform $(if ($Category.Platform) { $Category.Platform } else { Get-PolicyPlatform -Policy $Entity }) `
        -ScopeTagIds $scopeTagIds -ScopeTags $scopeTagNames `
        -AssignmentId $Assignment.AssignmentId `
        -AssignmentMode $assignmentMode `
        -TargetType $targetType -TargetId $targetId -TargetName $targetName `
        -Intent $Assignment.Intent -FilterId $Assignment.FilterId `
        -FilterName $(if ($filter) { $filter.Name } else { $null }) `
        -FilterMode $Assignment.FilterType `
        -FilterRule $(if ($filter) { $filter.Rule } else { $null }) `
        -FilterPlatform $(if ($filter) { $filter.Platform } else { $null }) `
        -SubjectType $SubjectType -SubjectId $SubjectId -SubjectName $SubjectName `
        -AssignmentReason $Assignment.Reason -Source $Source
}