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, ValueFromPipelineByPropertyName=$True)]$TestData,
        [parameter(Mandatory=$False)][string]$Path = "$($env:USERPROFILE)\Desktop\healthreport.htm",
        [parameter(Mandatory=$False)][switch]$Show
    )
    BEGIN {
        $tablewidth = "800px"
        $leftpanel = "150px"
        $heading = "<h1>Health Report</h1>"
    }
    PROCESS {
        $summary = $TestData | Group-Object Status

        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 {
        $body += "<p>Copyright &copy;$(Get-Date -f 'yyyy') Skatterbrainz, All rights reserved. No tables reserved.</p>"

        $summary = "<table width=$tablewidth><tr><th>Count</th><th>Result</th><th>Tests</th></tr>"
        $TestData | Group-Object Status | Foreach-Object {
            $summary += "<tr><td>$($_.Count)</td><td>$($_.Name)</td><td>$("<ul><li>$($_.Group.TestName -join '</li><li>')</li></ul>")</td></tr>"
        }
        $summary += "</table>"
        $heading += $summary
        $body = $heading + $body
        $head = @"
<style><!--
td,th {font-family:verdana;font-size:10pt;}
body {font-family:calibri,helvetica,sans;}
--></style>
"@

        $report = "Health Report" | ConvertTo-Html -Title "Health Report" -Body $body -Head $head
        $report | Out-File $Path -Force
        if ($Show) { Start-Process $Path }
    }
}