Private/Export/Export-InitiativeCsv.ps1

function Export-InitiativeCsv {
    <#
    .SYNOPSIS
    Exports individual initiative policies to CSV file.
     
    .DESCRIPTION
    Exports the expanded policies from a single initiative to a CSV file
    named Initiative-{AssignmentName}-Policies.csv.
     
    Used to create per-initiative policy lists for detailed analysis.
     
    .PARAMETER Assignment
    The policy assignment object.
     
    .PARAMETER Policies
    Array of policy objects from Expand-PolicySetMembers.
     
    .PARAMETER OutputFolder
    Folder path where the CSV file will be created.
     
    .EXAMPLE
    Export-InitiativeCsv -Assignment $assignment `
                         -Policies $assRefs `
                         -OutputFolder "C:\Reports\initiatives"
     
    Exports initiative policies to initiatives folder.
     
    .OUTPUTS
    None. Writes CSV file to disk.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [object]$Assignment,
        
        [Parameter(Mandatory)]
        [object[]]$Policies,
        
        [Parameter(Mandatory)]
        [string]$OutputFolder
    )
    
    try {
        # Get assignment name (already sanitized by New-ComparisonSummary if needed)
        $assignmentName = if ($Assignment.AssignmentName) { 
            $Assignment.AssignmentName 
        } elseif ($Assignment.Name) { 
            $Assignment.Name 
        } else { 
            ($Assignment.AssignmentDisplayName -replace '[\\/:*?"<>|]', '_') -replace '\s+', '-'
        }
        
        if ([string]::IsNullOrWhiteSpace($assignmentName)) {
            Write-Warning "Cannot export initiative CSV: Assignment name is empty for '$($Assignment.AssignmentDisplayName)'"
            return
        }
        
        $initiativeCsvPath = Join-Path $OutputFolder "Initiative-$assignmentName-Policies.csv"
        
        $Policies | Sort-Object PolicyDisplayName | 
            Export-Csv -Path $initiativeCsvPath -NoTypeInformation -Encoding UTF8
        
        Write-Debug "Exported initiative CSV: $initiativeCsvPath"
    }
    catch {
        Write-Warning "Failed to export initiative CSV for '$assignmentName': $($_.Exception.Message)"
    }
}