public/Out-HealthReport.ps1
<#
.SYNOPSIS Export HTML report .DESCRIPTION Export HTML health test report .PARAMETER TestData Health test data, returned from Test-CmHealth .PARAMETER Path HTML file path .PARAMETER Show Open HTML report when complete #> function Out-HealthReport { [CmdletBinding()] param ( [parameter(Mandatory=$True, ValueFromPipeline=$True)]$TestData, [parameter(Mandatory=$False)][string]$Path = "$($env:USERPROFILE)\Desktop\healthreport.htm", [parameter(Mandatory=$False)][string][ValidateSet('All','Fail','Pass','Warning','Error')] $Status = 'All', [parameter(Mandatory=$False)][switch]$Show ) $stats = $TestData | Group-Object Status | Select-Object Name,Count,Group BEGIN { Write-Verbose "defining HTML properties" $tablewidth = "800px" $leftpanel = "150px" $styles = @" <style><!-- td,th {font-family:verdana;font-size:10pt;} body {font-family:calibri,helvetica,sans;} --></style> "@ $heading = "<h1>Health Report</h1>" $footer = "<p>Copyright ©$(Get-Date -f 'yyyy') Skatterbrainz, All rights reserved. No tables reserved.</p>" if ($Status -ne 'All') { Write-Verbose "filtering test data for status = $Status" $TestData = $TestData | Where-Object {$_.Status -eq $Status} } Write-Verbose "processing test data" } PROCESS { #$summary = $TestData | Group-Object Status | Select-Object Name,Count,Group foreach ($item in $TestData) { $chunk = $item | foreach-object { @" <h2>$($_.TestName)</h2> <table width=$tablewidth> <tr><td width=$leftpanel>Description</td><td>$($_.Description)</td></tr> <tr><td>Group</td><td>$($_.TestGroup)</td></tr> <tr><td>Test Result</td><td>$($_.Status)</td></tr> <tr><td>Message</td><td>$($_.Message)</td></tr> <tr><td>Runtime</td><td>$($_.Runtime)</td></tr> "@ if ($item.TestData.Count -gt 0) { $tdata = $item.TestData -join ';' $chunk += "<tr><td>Data</td><td>$($tdata.ToString())</td></tr>" } } $chunk += "</table>" $body += $chunk } } END { Write-Verbose "combining output to HTML" $body += $footer $statsummary = "<table width=$tablewidth><tr><th>Count</th><th>Result</th><th>Tests</th></tr>" $summary | Foreach-Object { $statsummary += "<tr><td>$($_.Count)</td><td>$($_.Name)</td><td>$("<ul><li>$($_.Group.TestName -join '</li><li>')</li></ul>")</td></tr>" } $statsummary += "</table>" $body = $heading + $statsummary + $body $report = "Health Report" | ConvertTo-Html -Title "Health Report" -Body $body -Head $styles $report | Out-File $Path -Force if ($Show) { Start-Process $Path } } } |