Private/Export/Export-SummaryCsv.ps1
|
function Export-SummaryCsv { <# .SYNOPSIS Exports the comparison summary to CSV file. .DESCRIPTION Exports the summary of all assignment comparisons to a CSV file named Baseline_Compare_Summary.csv. Includes metrics for each assignment: DisplayName, Name, Scope, TotalPolicies, InCommon, Extra, VersionDiffs, etc. ✅ OPTIMIZED VERSION - Deduplicates entries before export to prevent duplicate rows for the same assignment. .PARAMETER Summary Array of summary objects from New-ComparisonSummary. .PARAMETER OutputPath Full path to the output CSV file. .EXAMPLE Export-SummaryCsv -Summary $summary -OutputPath "C:\Reports\Baseline_Compare_Summary.csv" Exports summary to specified CSV file. .OUTPUTS None. Writes CSV file to disk. #> [CmdletBinding()] param( [Parameter(Mandatory)] [object[]]$Summary, [Parameter(Mandatory)] [string]$OutputPath ) try { # ========== ✅ DÉDUPLICATION DU SUMMARY ========== Write-Verbose "Checking for duplicate assignments in Summary before CSV export..." $summaryBeforeDedup = $Summary.Count # Grouper par AssignmentName pour détecter les duplicatas $groupedSummary = $Summary | Group-Object AssignmentName # Vérifier s'il y a des duplicatas $duplicates = $groupedSummary | Where-Object { $_.Count -gt 1 } if ($duplicates) { Write-Warning "⚠️ Duplicate assignments detected in Summary (will be deduplicated):" foreach ($dup in $duplicates) { Write-Warning " - Assignment '$($dup.Name)' appears $($dup.Count) times" } # Dédupliquer : garder la première entrée de chaque groupe $uniqueSummary = $groupedSummary | ForEach-Object { $_.Group | Select-Object -First 1 } Write-Verbose "✅ Summary deduplicated for CSV export: $summaryBeforeDedup → $($uniqueSummary.Count) entries" Write-Verbose " Removed $($summaryBeforeDedup - $uniqueSummary.Count) duplicate entries" } else { Write-Verbose "✅ No duplicates in Summary (all $($Summary.Count) assignments are unique)" $uniqueSummary = $Summary } # Export le Summary dédupliqué $uniqueSummary | Sort-Object AssignmentDisplayName | Export-Csv -Path $OutputPath -NoTypeInformation -Encoding UTF8 Write-Host (" ✅ Summary exported: {0}" -f (Split-Path $OutputPath -Leaf)) -ForegroundColor Green if ($duplicates) { Write-Host (" ℹ️ Deduplicated: $summaryBeforeDedup → $($uniqueSummary.Count) rows") -ForegroundColor Yellow } } catch { Write-Warning "Failed to export summary CSV: $($_.Exception.Message)" } } |