public/Get-CmHealthTests.ps1

<#
.SYNOPSIS
    Display CMHealth Tests and description info
.DESCRIPTION
    Display CMHealth tests and additional descriptive information
.EXAMPLE
    Get-CmHealthTests
.NOTES
    Added in 0.3.8
.LINK
    https://github.com/Skatterbrainz/cmhealth/blob/master/docs/Get-CmHealthTests.md
#>

function Get-CmHealthTests {
    [CmdletBinding()]
    param()
    $mpath = $(Split-Path (Get-Module cmhealth).Path)
    $tpath = "$($mpath)\tests"
    $tests = Get-ChildItem -Path $tpath -Filter "*.ps1" -ErrorAction Stop
    foreach ($test in $tests) {
        . $test.FullName
        $basename = $test.BaseName
        $ast = (Get-Command $basename).ScriptBlock.Ast
        $x = $ast.Body.ParamBlock.Parameters.Extent.Text
        $testname  = $x[0].Split('=')[1].Trim()
        $testgroup = $x[1].Split('=')[1].Trim()
        $testdesc  = $x[2].Split('=')[1].Trim()
        switch ($basename.Substring(5,2)) {
            'ad' { $type = 'AD' }
            'cm' { $type = 'CM' }
            'sq' { $type = 'SQL' }
            'ii' { $type = 'IIS' }
            'ho' { $type = 'Host' }
            default { $basename.Substring(5,2) }
        }
        [pscustomobject]@{
            Test  = $basename
            Name  = $testname.Replace('"', '')
            Group = $testgroup.Replace('"', '')
            Type  = $type
            Description = $testdesc.Replace('"', '')
        }
    }
}