Functions/SystemHealth/Get-PASComponentSummary.ps1

# .ExternalHelp psPAS-help.xml
Function Get-PASComponentSummary {
    [CmdletBinding()]
    param(

    )

    BEGIN {
        Assert-VersionRequirement -RequiredVersion 10.1
    }#begin

    PROCESS {

        #Create URL for request
        $URI = "$($psPASSession.BaseURI)/api/ComponentsMonitoringSummary"

        #send request to web service
        $result = Invoke-PASRestMethod -Uri $URI -Method GET

        If ($null -ne $result) {

            $result | Select-Object -ExpandProperty Components

            # Process vaults with conditional property selection
            $vaults = $result | Select-Object -ExpandProperty Vaults | Add-ObjectDetail -PropertyToAdd @{
                'ComponentID'   = 'EPV'
                'ComponentName' = 'EPV'
            }

            # Output Primary vaults without replication fields
            $vaults | Where-Object { $_.Role -ne 'DR' } | Select-Object ComponentID, ComponentName, Role, IP, IsLoggedOn

            # Check if version supports replication status fields (14.6+)
            $currentVersion = [System.Version]::new($psPASSession.ExternalVersion)
            $requiredVersion = [System.Version]::new('14.6.0')
            $supportsReplicationStatus = $currentVersion -ge $requiredVersion

            # Output DR vaults with conditional replication fields based on version
            if ($supportsReplicationStatus) {
                # Version 14.6+: Include replication status fields
                $vaults | Where-Object { $_.Role -eq 'DR' } | Select-Object ComponentID, ComponentName, Role, IP, IsLoggedOn, @{
                    Name = 'DBReplicationDiffSecs'
                    Expression = { if ($_.ReplicationStatus) { $_.ReplicationStatus.DBReplicationDiffSecs } else { $null } }
                }, @{
                    Name = 'IsDBReplicationHealthy'
                    Expression = { if ($_.ReplicationStatus) { $_.ReplicationStatus.IsDBReplicationHealthy } else { $null } }
                }, @{
                    Name = 'FileReplicationDiffSecs'
                    Expression = { if ($_.ReplicationStatus) { $_.ReplicationStatus.FileReplicationDiffSecs } else { $null } }
                }, @{
                    Name = 'IsFileReplicationHealthy'
                    Expression = { if ($_.ReplicationStatus) { $_.ReplicationStatus.IsFileReplicationHealthy } else { $null } }
                }
            } else {
                # Version < 14.6: Show basic DR vault information without replication fields
                $vaults | Where-Object { $_.Role -eq 'DR' } | Select-Object ComponentID, ComponentName, Role, IP, IsLoggedOn
            }

        }

    }#process

    END { }#end

}