Functions/PoShMon.Monitoring.SharePoint/Test-SPServerStatus.ps1

Function Test-SPServerStatus
{
    [CmdletBinding()]
    param (
        [hashtable]$PoShMonConfiguration
    )

    $mainOutput = Get-InitialOutputWithTimer `
                                        -SectionHeader "Farm Server Status" `
                                        -OutputHeaders ([ordered]@{ 'ServerName' = 'Server Name'; 'Role' = 'Role'; 'NeedsUpgrade' = 'Needs Upgrade?'; 'Status' ='Status' }) `
                                        -HeaderUrl ($PoShMonConfiguration.SharePoint.CentralAdminUrl + "/_admin/FarmServers.aspx")

    foreach ($ServerName in $PoShMonConfiguration.General.ServerNames) # $farm.Servers
    {
        $server = Get-SPServerForRemoteServer -PoShMonConfiguration $PoShMonConfiguration -ServerName $ServerName

        $highlight = @()

        Write-Verbose "`t$($server.DisplayName) : $($server.Status) : $($server.NeedsUpgrade)"

        if ($server.NeedsUpgrade)
        {
            $needsUpgradeValue = "Yes"
            $highlight += 'NeedsUpgrade'
            $mainOutput.NoIssuesFound = $false
            Write-Warning "`t$($server.DisplayName) is listed as Needing Upgrade"
        } else {
            $needsUpgradeValue = "No"
        }

        if ($server.Status -ne 'Online')
        {
            $highlight += 'Status'
            $mainOutput.NoIssuesFound = $false
            Write-Warning "`t$($server.DisplayName) is not listed as Online. Status: $($server.Status)"
        }

        $mainOutput.OutputValues += [pscustomobject]@{
            'ServerName' = $server.DisplayName;
            'NeedsUpgrade' = $needsUpgradeValue;
            'Status' = $server.Status.ToString();
            'Role' = $server.Role.ToString();
            'Highlight' = $highlight
        }
    }

    return (Complete-TimedOutput $mainOutput)
}
<#
    $output = Test-SPServerStatus -Verbose
#>