Functions/Public/Invoke-AMHealthCheck.ps1
function Invoke-AMHealthCheck { <# .SYNOPSIS Executes a health check against Automate Enterprise .DESCRIPTION Invoke-AMHealthCheck dynamically loads health checks from the Plugins folder and performs them against Automate Enterprise .PARAMETER CustomConfigPath The path to a JSON file containing health check configuration settings. This file can include new, custom health checks, or modifications to built in health checks. .PARAMETER Connection The Automate Enterprise management server. #> [CmdletBinding()] param ( [ValidateScript({Test-Path -Path $_})] $CustomConfigPath, [ValidateNotNullOrEmpty()] $Connection ) if ($PSBoundParameters.ContainsKey("Connection")) { $Connection = Get-AMConnection -Connection $connection } else { $Connection = Get-AMConnection } $objectCache = @{} $results = @() foreach ($c in $Connection) { Write-Verbose "Server $($c.Alias): Querying objects" $objectCache.Add($c.Alias, @{}) $objectCache[$c.Alias].Add("Workflows", (Get-AMWorkflow -Connection $c.Alias)) $objectCache[$c.Alias].Add("Tasks", (Get-AMTask -Connection $c.Alias)) $objectCache[$c.Alias].Add("Conditions", (Get-AMCondition -Connection $c.Alias)) $objectCache[$c.Alias].Add("Processes", (Get-AMProcess -Connection $c.Alias)) $objectCache[$c.Alias].Add("Folders", (Get-AMFolder -Connection $c.Alias)) $objectCache[$c.Alias].Add("Agents", (Get-AMAgent -Connection $c.Alias)) $objectCache[$c.Alias].Add("SystemAgents", (Get-AMSystemAgent -Connection $c.Alias)) $objectCache[$c.Alias].Add("AgentGroups", (Get-AMAgentGroup -Connection $c.Alias)) $objectCache[$c.Alias].Add("Users", (Get-AMUser -Connection $c.Alias)) $objectCache[$c.Alias].Add("UserGroups", (Get-AMUserGroup -Connection $c.Alias)) $objectCache[$c.Alias].Add("SystemPermissions", (Get-AMSystemPermission -Connection $c.Alias)) $objectCache[$c.Alias].Add("Server", (Get-AMServer -Connection $c.Alias)) $objectCache[$c.Alias].Add("Execution", (Get-AMServer -Type Execution -Connection $c.Alias)) $objectCache[$c.Alias].Add("Management", (Get-AMServer -Type Management -Connection $c.Alias)) $objectCache[$c.Alias].Add("AllAgents", @($objectCache[$c.Alias].Agents) + @($objectCache[$c.Alias].SystemAgents) + @($objectCache[$c.Alias].AgentGroups)) $objectCache[$c.Alias].Add("AllUsers", @($objectCache[$c.Alias].Users) + @($objectCache[$c.Alias].UserGroups)) $objectCache[$c.Alias].Add("Repository", @($objectCache[$c.Alias].Workflows) + @($objectCache[$c.Alias].Tasks) + @($objectCache[$c.Alias].Conditions) + @($objectCache[$c.Alias].Processes)) if ($CustomConfigPath) { $config = Get-AMHealthCheckConfiguration -CustomConfigPath $CustomConfigPath } else { $config = Get-AMHealthCheckConfiguration } foreach ($category in ($config.Categories | Where-Object {$_.Enabled} | Sort-Object -Property "SortOrder")) { foreach ($healthCheck in ($category.HealthChecks | Where-Object {$_.Enabled} | Sort-Object -Property "SortOrder")) { if (Get-Command -Name $healthCheck.Function -ErrorAction SilentlyContinue) { $parameters = (Get-Command $healthCheck.Function).Parameters.Keys | Where-Object {($_ -notin [System.Management.Automation.PSCmdlet]::CommonParameters) -and ($_ -notin [System.Management.Automation.PSCmdlet]::OptionalCommonParameters)} $splat = @{} foreach ($parameter in $parameters) { if ($objectCache[$c.Alias].ContainsKey($parameter)) { $splat.Add($parameter, $objectCache[$c.Alias][$parameter]) } else { Write-Warning "Could not find data for parameter -$parameter in health check function $($healthCheck.Function)!" } } Write-Verbose "Server $($c.Alias): Running health check $($category.Name) - $($healthCheck.Name)" $output = Invoke-Expression -Command ($healthCheck.Function + ' @splat') if ($healthCheck.ShowCount) { $healthCheckResultCount = ($output | Measure-Object).Count $healthCheckName = "$($healthCheck.Name) : $healthCheckResultCount Objects" } else { $healthCheckName = $healthCheck.Name } $results += [AMHealthCheckResult]::new($category.Name, $healthCheckName, $healthCheck.Description, $healthCheck.Function, $healthCheck.Importance, $output, $c.Alias) } else { Write-Warning "Could not find health check $($healthCheck.Function)!" } } } } return $results } |