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)" } } |