Permalink
Browse files

Update Build

-Added CU6,CU17 builds
-Fixed page file object issue
-Added Feature for NUMA settings on the BIOS
  • Loading branch information...
dpaulson45 committed Jul 6, 2017
1 parent 74df127 commit 6625cdbe594e8af18d1eb04cd741e424db176130
Showing with 66 additions and 11 deletions.
  1. +66 −11 HealthChecker.ps1
@@ -85,7 +85,7 @@ param(
Note to self. "New Release Update" are functions that i need to update when a new release of Exchange is published
#>
$healthCheckerVersion = "2.8"
$healthCheckerVersion = "2.9"
$VirtualizationWarning = @"
Virtual Machine detected. Certain settings about the host hardware cannot be detected from the virtual machine. Verify on the VM Host that:
@@ -176,7 +176,8 @@ Add-Type -TypeDefinition @"
CU13,
CU14,
CU15,
CU16
CU16,
CU17
}
@@ -255,6 +256,7 @@ Add-Type -TypeDefinition @"
public string ProcessorName; //String of the processor name
public object Processor; // object to store the processor information
public bool DifferentProcessorsDetected; //true/false to detect if we have different processor types detected
public int EnvProcessorCount; //[system.environment]::processorcount
}
@@ -441,7 +443,7 @@ param(
$pagefile = Get-WmiObject -ComputerName $Machine_Name -Class Win32_PageFileSetting
if($pagefile -ne $null)
{
if($pagefile.Count -gt 1)
if($pagefile.GetType().Name -eq "ManagementObject")
{
$page_obj.MaxPageSize = $pagefile.MaximumSize
}
@@ -509,13 +511,13 @@ param(
}
Function Get-HttpPorxySetting {
Function Get-HttpProxySetting {
param(
[Parameter(Mandatory=$true)][string]$Machine_Name
)
$httpProxy32 = [String]::Empty
$httpProxy64 = [String]::Empty
Write-VerboseOutput("Calling Get-HttpPorxySetting")
Write-VerboseOutput("Calling Get-HttpProxySetting")
Write-VerboseOutput("Passed: {0}" -f $Machine_Name)
$orgErrorPref = $ErrorActionPreference
$ErrorActionPreference = "Stop"
@@ -621,7 +623,7 @@ param(
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Machine_Name)
$RegKey= $Reg.OpenSubKey("SYSTEM\CurrentControlSet\Services\Tcpip\Parameters")
$os_obj.TCPKeepAlive = $RegKey.GetValue("KeepAliveTime")
$os_obj.HttpProxy = Get-HttpPorxySetting -Machine_Name $Machine_Name
$os_obj.HttpProxy = Get-HttpProxySetting -Machine_Name $Machine_Name
$os_obj.HotFixes = (Get-HotFix -ComputerName $Machine_Name -ErrorAction SilentlyContinue)
$os_obj.LmCompat = (Build-LmCompatibilityLevel -Machine_Name $Machine_Name)
@@ -688,6 +690,25 @@ param(
if($processor.Name -ne $processor_info_object.ProcessorName -or $processor.MaxClockSpeed -ne $processor_info_object.MaxMegacyclesPerCore){$processor_info_object.DifferentProcessorsDetected = $true; Write-VerboseOutput("Different Processors are detected"); Write-Yellow("Different Processors are detected. This shouldn't occur")}
}
Write-VerboseOutput("Trying to get the System.Environment ProcessorCount")
$oldError = $ErrorActionPreference
$ErrorActionPreference = "Stop"
try
{
$processor_info_object.EnvProcessorCount = (
Invoke-Command -ComputerName $Machine_Name -ScriptBlock {[System.Environment]::ProcessorCount}
)
}
catch
{
Write-Red("Unable to get Environment Processor Count on server {0}" -f $Machine_Name)
$processor_info_object.EnvProcessorCount = -1
}
finally
{
$ErrorActionPreference = $oldError
}
$processor_info_object.Processor = $wmi_obj_processor
return $processor_info_object
@@ -852,7 +873,8 @@ param(
elseif($buildRevision -lt 544.27) {if($buildRevision -gt 466.34){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU2}
elseif($buildRevision -lt 669.32) {if($buildRevision -gt 544.27){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU3}
elseif($buildRevision -lt 845.34) {if($buildRevision -gt 669.32){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU4}
elseif($buildRevision -ge 845.34) {if($buildRevision -gt 845.34){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU5}
elseif($buildRevision -lt 1034.26) {if($buildRevision -gt 845.34){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU5}
elseif($buildRevision -ge 1034.26) {if($buildRevision -gt 1034.26){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU6}
}
elseif($AdminDisplayVersion.Major -eq 15 -and $AdminDisplayVersion.Minor -eq 0)
@@ -875,7 +897,8 @@ param(
elseif($buildRevision -lt 1236.3) {if($buildRevision -gt 1210.3){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU13}
elseif($buildRevision -lt 1263.5) {if($buildRevision -gt 1236.3){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU14}
elseif($buildRevision -lt 1293.2) {if($buildRevision -gt 1263.5){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU15}
elseif($buildRevision -ge 1293.2) {if($buildRevision -gt 1293.2){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU16}
elseif($buildRevision -lt 1320.4) {if($buildRevision -gt 1293.2){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU16}
elseif($buildRevision -ge 1320.4) {if($buildRevision -gt 1320.4){$exBuildObj.InbetweenCUs = $true} $exBuildObj.CU = [HealthChecker.ExchangeCULevel]::CU17}
}
else
{
@@ -916,8 +939,9 @@ param(
([HealthChecker.ExchangeCULevel]::CU1) {$tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.FriendlyName = "Exchange 2016 CU1"; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.ReleaseDate = "03/15/2016"; break}
([HealthChecker.ExchangeCULevel]::CU2) {$tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.FriendlyName = "Exchange 2016 CU2"; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.ReleaseDate = "06/21/2016"; break}
([HealthChecker.ExchangeCULevel]::CU3) {$tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.FriendlyName = "Exchange 2016 CU3"; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.ReleaseDate = "09/20/2016"; break}
([HealthChecker.ExchangeCULevel]::CU4) {$tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.FriendlyName = "Exchange 2016 CU4"; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.ReleaseDate = "12/13/2016"; $tempObject.SupportedCU = $true; break}
([HealthChecker.ExchangeCULevel]::CU4) {$tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.FriendlyName = "Exchange 2016 CU4"; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.ReleaseDate = "12/13/2016"; break}
([HealthChecker.ExchangeCULevel]::CU5) {$tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.FriendlyName = "Exchange 2016 CU5"; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.ReleaseDate = "03/21/2017"; $tempObject.SupportedCU = $true; break}
([HealthChecker.ExchangeCULevel]::CU6) {$tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.FriendlyName = "Exchange 2016 CU6"; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.ReleaseDate = "06/24/2017"; $tempObject.SupportedCU = $true; break}
default {Write-Red "Unknown Exchange 2016 build was detected"; $tempObject.Error = $true; break;}
}
break;
@@ -942,8 +966,9 @@ param(
([HealthChecker.ExchangeCULevel]::CU12) {$tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.FriendlyName = "Exchange 2013 CU12"; $tempObject.ReleaseDate = "03/15/2016"; break}
([HealthChecker.ExchangeCULevel]::CU13) {$tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.FriendlyName = "Exchange 2013 CU13"; $tempObject.ReleaseDate = "06/21/2016"; break}
([HealthChecker.ExchangeCULevel]::CU14) {$tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.FriendlyName = "Exchange 2013 CU14"; $tempObject.ReleaseDate = "09/20/2016"; break}
([HealthChecker.ExchangeCULevel]::CU15) {$tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.FriendlyName = "Exchange 2013 CU15"; $tempObject.ReleaseDate = "12/13/2016"; $tempObject.SupportedCU = $true; break}
([HealthChecker.ExchangeCULevel]::CU15) {$tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.FriendlyName = "Exchange 2013 CU15"; $tempObject.ReleaseDate = "12/13/2016"; break}
([HealthChecker.ExchangeCULevel]::CU16) {$tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.FriendlyName = "Exchange 2013 CU16"; $tempObject.ReleaseDate = "03/21/2017"; $tempObject.SupportedCU = $true; break}
([HealthChecker.ExchangeCULevel]::CU17) {$tempObject.ExchangeBuildObject = $exBuildObj; $tempObject.InbetweenCUs = $exBuildObj.InbetweenCUs; $tempObject.ExchangeBuildNumber = (Get-BuildNumberToString $AdminDisplayVersion); $tempObject.FriendlyName = "Exchange 2013 CU17"; $tempObject.ReleaseDate = "06/24/2017"; $tempObject.SupportedCU = $true; break}
default {Write-Red "Unknown Exchange 2013 build was detected"; $tempObject.Error = $TRUE; break;}
}
break;
@@ -1745,7 +1770,7 @@ param(
#Http Proxy Settings#
#####################
Write-Grey("Http Porxy Setting:")
Write-Grey("Http Proxy Setting:")
if($HealthExSvrObj.OSVersion.HttpProxy -eq "<None>")
{
Write-Green("`tSetting: {0}" -f $HealthExSvrObj.OSVersion.HttpProxy)
@@ -1864,6 +1889,36 @@ param(
Write-Green("`tNumber of Physical Cores: " + $HealthExSvrObj.HardwareInfo.Processor.NumberOfPhysicalCores)
Write-Green("`tNumber of Logical Cores: " + $HealthExSvrObj.HardwareInfo.Processor.NumberOfLogicalProcessors)
}
if($HealthExSvrObj.HardwareInfo.Model -like "*ProLiant*")
{
if($HealthExSvrObj.HardwareInfo.Processor.EnvProcessorCount -eq -1)
{
Write-Yellow("`tNUMA Group Size Optimization: Unable to determine")
}
elseif($HealthExSvrObj.HardwareInfo.Processor.EnvProcessorCount -ne $HealthExSvrObj.HardwareInfo.Processor.NumberOfLogicalProcessors)
{
Write-Red("`tNUMA Group Size Optimization: BIOS Set to Clustered")
}
else
{
Write-Green("`tNUMA Group Size Optimization: BIOS Set to Flat")
}
}
else
{
if($HealthExSvrObj.HardwareInfo.Processor.EnvProcessorCount -eq -1)
{
Write-Yellow("`tAll Processor Cores Visible: Unable to determine")
}
elseif($HealthExSvrObj.HardwareInfo.Processor.EnvProcessorCount -ne $HealthExSvrObj.HardwareInfo.Processor.NumberOfLogicalProcessors)
{
Write-Red("`tAll Processor Cores Visible: Not all Processor Cores are visable to Exchange and this will cause a performance impact")
}
else
{
Write-Green("`tAll Processor Cores Visible: Passed")
}
}
if($HealthExSvrObj.HardwareInfo.Processor.ProcessorIsThrottled)
{
#We are set correctly at the OS layer

0 comments on commit 6625cdb

Please sign in to comment.