Private/Get-HealthCheckFailureSummary.ps1
|
function Get-HealthCheckFailureSummary { <# .SYNOPSIS Extracts health check failure reasons from an update summary object. .DESCRIPTION Analyzes the healthCheckResult property from an Azure Local update summary to extract critical and warning health check failures. Returns a summary string suitable for CSV logging. #> [CmdletBinding()] param( [Parameter(Mandatory = $false)] [object]$UpdateSummary ) if (-not $UpdateSummary -or -not $UpdateSummary.properties.healthCheckResult) { return "" } $failures = @() $healthChecks = $UpdateSummary.properties.healthCheckResult foreach ($check in $healthChecks) { if ($check.status -eq "Failed") { $severity = if ($check.severity) { $check.severity } else { "Unknown" } # Only include Critical and Warning severities (skip Informational) if ($severity -notin @("Critical", "Warning")) { continue } $displayName = if ($check.displayName) { $check.displayName } elseif ($check.name) { ($check.name -split '/')[0] } else { "Unknown Check" } $targetNode = if ($check.targetResourceName) { " ($($check.targetResourceName))" } else { "" } $failures += "[$severity] $displayName$targetNode" } } if ($failures.Count -gt 0) { # Limit to top 5 failures to keep CSV readable $topFailures = $failures | Select-Object -First 5 $summary = $topFailures -join "; " if ($failures.Count -gt 5) { $summary += " (+$($failures.Count - 5) more)" } return $summary } return "" } |