Private/DataProcessing/Expand-PurviewLabelsIfNeeded.ps1
|
function Expand-PurviewLabelsIfNeeded { <# .SYNOPSIS Expands label details conditionally (performance aware) preserving output. .DESCRIPTION Mirrors expansion logic including environment variable limit and timeout job approach. .PARAMETER Labels Raw label array to potentially expand. .PARAMETER QuietMode Suppress verbose output. .PARAMETER NoProgress Disable progress bars. .OUTPUTS Array of (possibly) expanded labels. #> [CmdletBinding()] param( [Parameter(Mandatory)]$Labels, [switch]$QuietMode, [switch]$NoProgress ) $labelsRaw = $Labels if ($labelsRaw.Count -eq 0) { return $labelsRaw } $labelExpansionLimit = 50 if ($env:AUTHContext_LABEL_EXPANSION_LIMIT) { try { $labelExpansionLimit = [int]$env:AUTHContext_LABEL_EXPANSION_LIMIT } catch { Write-Verbose 'Failed to parse AUTHContext_LABEL_EXPANSION_LIMIT; using default.' } } if ($labelsRaw.Count -gt $labelExpansionLimit) { if (-not $QuietMode) { Write-Host (' → Skipping individual label expansion (too many labels: {0} > {1})' -f $labelsRaw.Count, $labelExpansionLimit) -ForegroundColor DarkYellow } if (-not $QuietMode) { Write-Host ' → Set AUTHContext_LABEL_EXPANSION_LIMIT environment variable to override' -ForegroundColor DarkGray } return $labelsRaw } $expandedLabels = [System.Collections.Generic.List[object]]::new() $labelIndex = 0 $maxLabelExpansionTime = 30 $skippedSlowLabels = 0 foreach ($labelBrief in $labelsRaw) { $labelIndex++ if (-not $NoProgress -and $labelsRaw.Count -gt 5) { Write-Progress -Id 99 -Activity 'Processing Sensitivity Labels' -Status "Label $labelIndex of $($labelsRaw.Count) ($skippedSlowLabels skipped)" -PercentComplete (($labelIndex / $labelsRaw.Count) * 100) } try { if (-not $labelBrief.LabelActions -and -not $labelBrief.SiteAndGroupSettings) { $Guid = $labelBrief.Guid $labelJob = Start-Job -ScriptBlock { try { Get-Label -Identity $using:Guid -ErrorAction Stop } catch { $null } } if (Wait-Job -Job $labelJob -Timeout $maxLabelExpansionTime) { $detailedLabel = Receive-Job -Job $labelJob if ($detailedLabel) { $expandedLabels.Add($detailedLabel) } else { $expandedLabels.Add($labelBrief) } } else { if (-not $QuietMode) { Write-Host (' ⚠ Label {0} expansion timeout, using brief data' -f $labelBrief.DisplayName) -ForegroundColor DarkYellow } $expandedLabels.Add($labelBrief) $skippedSlowLabels++ } Remove-Job -Job $labelJob -Force -ErrorAction SilentlyContinue } else { $expandedLabels.Add($labelBrief) } } catch { Write-Verbose ("Failed to expand label {0}: {1}" -f $labelBrief.DisplayName, $_.Exception.Message) $expandedLabels.Add($labelBrief) } } if (-not $NoProgress -and $labelsRaw.Count -gt 5) { Write-Progress -Id 99 -Activity 'Processing Sensitivity Labels' -Completed } if ($skippedSlowLabels -gt 0 -and -not $QuietMode) { Write-Host (' → Completed label processing ({0} labels processed, {1} timeouts)' -f $expandedLabels.Count, $skippedSlowLabels) -ForegroundColor DarkCyan } return $expandedLabels.ToArray() } |