public/Test-CmHealth.ps1
<#
.SYNOPSIS Validate MECM/ConfigMgr site systems and configuration .DESCRIPTION Validate MECM/ConfigMgr site systems and configuration .PARAMETER SiteServer NetBIOS or FQDN of site server (primary, CAS, secondary) .PARAMETER SqlInstance NetBIOS or FQDN of site database SQL instance .PARAMETER Database Name of site database .PARAMETER SiteCode ConfigMgr site code .PARAMETER TestingScope Scope of tests to execute .PARAMETER Remediate Attempt remediation when possible .EXAMPLE Test-CmHealth -SiteServer "CM01" -SqlInstance "CM01" -Database "CM_P01" -SiteCode "P01" -TestingScope "ALL" Runs all tests .EXAMPLE Test-CmHealth -SiteServer "CM01" -SqlInstance "CM01" -Database "CM_P01" -SiteCode "P01" -TestingScope "Host" Runs only the site server host tests .EXAMPLE Test-CmHealth -SiteServer "CM01" -SqlInstance "CM01" -Database "CM_P01" -SiteCode "P01" -TestingScope "Host" -Remediate Runs only the site server host tests and attempts to remediate identified deficiences #> function Test-CmHealth { [CmdletBinding()] param ( [parameter()][ValidateNotNullOrEmpty()][string] $SiteServer = "localhost", [parameter()][ValidateNotNullOrEmpty()][string] $SqlInstance = "localhost", [parameter()][ValidateNotNullOrEmpty()][string] $Database = "CM_P01", [parameter()][ValidateLength(3,3)][string] $SiteCode = "", [parameter()][ValidateSet('All','Host','AD','SQL','CM','IIS','Select')][string] $TestingScope = 'All', [parameter()][bool] $Remediate = $False, [parameter()][string] $Source = "c:\windows\winsxs" ) $startTime = (Get-Date) $params = [ordered]@{ ComputerName = $SiteServer SqlInstance = $SqlInstance SiteCode = $SiteCode Database = $Database Source = $Source Remediate = $Remediate } switch ($TestingScope) { { $_ -in ('All','Host') } { # Site System Host Test-HostOperatingSystem -ScriptParams $params Test-HostMemory -ScriptParams $params Test-ServerFeatures -ScriptParams $params Test-DiskSpace -ScriptParams $params Test-DriveBlockSize -ScriptParams $params Test-IESCDisabled -ScriptParams $params Test-InstalledComponents -ScriptParams $params Test-NoSmsOnDriveFile -ScriptParams $params Test-ServiceAccounts -ScriptParams $params } { $_ -in ('All','SQL') } { Test-SqlServerMemory -ScriptParams $params Test-SqlDbCollation -ScriptParams $params Test-SqlDbDedicated -ScriptParams $params Test-SqlServicesSPN -ScriptParams $params Test-SqlDbBackupHistory -ScriptParams $params Test-DbRecoveryModel -ScriptParams $params Test-SqlDbFileGrowth -ScriptParams $params Test-SqlIndexFragmentation -ScriptParams $params Test-SqlAgentJobStatus -ScriptParams $params Test-SqlRoleMembers -ScriptParams $params Test-CmDbSize -ScriptParams $params Test-SqlUpdates -ScriptParams $params } { $_ -in ('All','AD') } { # Active Directory Test-AdSchemaExtension -ScriptParams $params Test-AdSysMgtContainer -ScriptParams $params } { $_ -in ('All','IIS') } { Test-IISLogFiles -ScriptParams $params Test-WsusIisAppPoolSettings -ScriptParams $params Test-WsusWebConfig -ScriptParams $params } { $_ -in ('All','CM') } { # Configuration Manager Site Test-CmMpResponse -ScriptParams $params Test-CmBoundaries -ScriptParams $params Test-CmCollectionRefresh -ScriptParams $params Test-CmCompStatus -ScriptParams $params # # more tests needed! # Test-CmClientCoverage -ScriptParams $params } 'Select' { $mpath = Split-Path $(Get-Module cmhealth).Path $tpath = "$($mpath)\tests" $tests = Get-ChildItem -Path $tpath -Filter "*.ps1" | Select Name,FullName | Sort-Object Name $test = $tests | Out-GridView -Title "Select Test to Execute" -OutputMode Single if ($null -ne $test) { $testname = $($test.Name -replace '.ps1','') $testname += ' -ScriptParams $params' iex $testname } } } $runTime = New-TimeSpan -Start $startTime -End (Get-Date) Write-Host "testing completed: $($runTime.Hours) hrs $($runTime.Minutes) min $($runTime.Seconds) sec" } |