Private/Test-XdHypervisorHealth.ps1

function Test-XdHypervisorHealth {
    <#
.SYNOPSIS
    Checks the Status of the Environmental Tests Passed In
.DESCRIPTION
    Checks the Status of the Environmental Tests Passed In
.PARAMETER AdminAddress
    Current Broker
.NOTES
    Current Version: 1.0
    Creation Date: 22/02/2018
.CHANGE CONTROL
    Name Version Date Change Detail
    Adam Yarborough 1.0 21/03/2018 Function Creation
    Adam Yarborough 1.1 07/06/2018 Update for object model.
    Adam Yarborough 1.2 20/06/2018 Begin/Process/End
.EXAMPLE
    None Required
#>


    [CmdletBinding()]
    Param(
        [parameter(Mandatory = $true, ValueFromPipeline = $true)]$AdminAddress
    )

    Begin {
        $ctxsnap = Add-PSSnapin Citrix.EnvTest.* -ErrorAction SilentlyContinue
        $ctxsnap = Get-PSSnapin Citrix.EnvTest.* -ErrorAction SilentlyContinue

        if ($null -eq $ctxsnap) {
            Write-Error "XenDesktop Powershell Snapin Load Failed"
            Write-Error "Cannot Load Citrix.EnvTest.* Powershell SDK"
            Return $false
        }
        else {
            Write-Verbose "XenDesktop Powershell SDK Snapin Loaded"
        }
    }

    Process { 
        #Create array with results
        $Results = @()
        $Errors = @()

        Write-Verbose "XdHypervisor Check started"
        $HypervisorConnections = Get-HypScopedObject -AdminAddress $AdminAddress -ErrorAction SilentlyContinue
        Write-Verbose "Initialize Test Variables"

        $Health = $true
        
        foreach ($Connection in $HypervisorConnections) {
            Write-Verbose "Testing $($Connection.Name)"
        
            $TestTarget = New-EnvTestDiscoveryTargetDefinition -AdminAddress $AdminAddress -TargetIdType "HypervisorConnection" -TestSuiteId "HypervisorConnection" -TargetId $Connection.HypHypervisorConnectionUid
            $TestResults = Start-EnvTestTask -AdminAddress $AdminAddress -InputObject $TestTarget -RunAsynchronously 
            foreach ( $Result in $TestResults.TestResults ) {
                foreach ( $Component in $Result.TestComponents ) {
                    Write-Verbose "$($Connection.Name) - $($Component.TestID) - $($Component.TestComponentStatus)"
                    if ( ($Component.TestComponentStatus -ne "CompletePassed") -and ($Component.TestComponentStatus -ne "NotRun") ) {
                        $Errors += "$($Connection.Name) - $($Component.TestID) - $($Component.TestComponentStatus)" 
                        $Health = $false
                    }
                }

            }       
       
            Write-Verbose "Testing associated resources"

            $HypervisorResources = Get-ChildItem XDHyp:\HostingUnits\* -AdminAddress $AdminAddress | Where-Object HypervisorConnection -like $Connection.Name

            # Check the resources
            foreach ($Resource in $HypervisorResources ) {
                $TestTarget = New-EnvTestDiscoveryTargetDefinition -AdminAddress $AdminAddress -TargetIdType "HostingUnit" -TestSuiteId "HostingUnit" -TargetId $Resource.HostingUnitUid
                $TestResults = Start-EnvTestTask -AdminAddress $AdminAddress -InputObject $TestTarget -RunAsynchronously 
                foreach ( $Result in $TestResults.TestResults ) {
                    Write-Verbose "$($Connection.Name) - $($Resource.HostingUnitName) - $($Component.TestID) - $($Component.TestComponentStatus)"
                    foreach ( $Component in $Result.TestComponents ) {
                        if ( ($Component.TestComponentStatus -ne "CompletePassed") -and ($Component.TestComponentStatus -ne "NotRun") ) {
                            $Errors += "$($Connection.Name) - $($Resource.HostingUnitName) - $($Component.TestID) - $($Component.TestComponentStatus)"    
                            $Health = $false
                        }
                    }
                }
            }
        }
    
        if ( $Health ) {
            return $true
        }
        else {
            $Results += [PSCustomObject]@{
                'Errors' = $Errors
            }
            return $Results
        }
    }

    End { }
}