Private/New-IACAssignmentRecord.ps1

function New-IACAssignmentRecord {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [AllowEmptyString()]
        [string]$CategoryId,
        [Parameter(Mandatory)]
        [AllowEmptyString()]
        [string]$Category,
        [Parameter(Mandatory)]
        [AllowEmptyString()]
        [string]$PolicyId,
        [Parameter(Mandatory)]
        [AllowEmptyString()]
        [string]$PolicyName,
        [string]$Platform = 'Unknown',
        [string[]]$ScopeTagIds = @(),
        [string[]]$ScopeTags = @(),
        [string]$AssignmentId,
        [ValidateSet('Include', 'Exclude', 'None', 'Unknown')]
        [string]$AssignmentMode = 'Unknown',
        [ValidateSet('AllUsers', 'AllDevices', 'Group', 'None', 'Unknown')]
        [string]$TargetType = 'Unknown',
        [string]$TargetId,
        [string]$TargetName,
        [string]$Intent,
        [string]$FilterId,
        [string]$FilterName,
        [string]$FilterMode,
        [string]$FilterRule,
        [string]$FilterPlatform,
        [ValidateSet('Included', 'Excluded', 'NotTargeted', 'Unknown')]
        [AllowNull()]
        [string]$EffectiveState,
        [object[]]$ReasonChain = @(),
        [string]$SubjectType,
        [string]$SubjectId,
        [string]$SubjectName,
        [string]$AssignmentReason,
        [string]$Source = 'MicrosoftGraph'
    )

    $record = [PSCustomObject][ordered]@{
        SchemaVersion    = 1
        TenantId         = $script:CurrentTenantId
        TenantName       = $script:CurrentTenantName
        SubjectType      = $SubjectType
        SubjectId        = $SubjectId
        SubjectName      = $SubjectName
        CategoryId       = $CategoryId
        Category         = $Category
        PolicyId         = $PolicyId
        PolicyName       = $PolicyName
        Platform         = $Platform
        ScopeTagIds      = @($ScopeTagIds | ForEach-Object { "$_" })
        ScopeTags        = @($ScopeTags | ForEach-Object { "$_" })
        AssignmentId     = $AssignmentId
        AssignmentMode   = $AssignmentMode
        TargetType       = $TargetType
        TargetId         = $TargetId
        TargetName       = $TargetName
        Intent           = $Intent
        FilterId         = $FilterId
        FilterName       = $FilterName
        FilterMode       = $FilterMode
        FilterRule       = $FilterRule
        FilterPlatform   = $FilterPlatform
        EffectiveState   = $EffectiveState
        ReasonChain      = @($ReasonChain)
        AssignmentReason = $AssignmentReason
        Source           = $Source
    }
    $record.PSObject.TypeNames.Insert(0, 'IntuneAssignmentChecker.AssignmentRecord')
    return $record
}