Public/Get-SCOMClassInfo.ps1
|
Function Get-SCOMClassInfo { <# .Synopsis Will display statistics about the total number of SCOM class instances and the management packs from which they originate. .EXAMPLE Get-SCOMClassInfo -Top 10 .EXAMPLE Get-SCOMClassInfo -Top 30 -MPStats .EXAMPLE Get-SCOMClassInfo -MPStats -ShowGraph .INPUTS None .OUTPUTS Custom Object: {InstanceCount,ClassName,MPName}, {MPName,TotalInstances} .NOTES Author: Tyson Paul Blog: https://monitoringguys.com/ Version: 1.0 Original Date: 2018.05.25 .FUNCTIONALITY Statistical reporting. .LINK Get-SCOMMPFileInfo New-SCOMClassGraph Unseal-SCOMMP #> Param ( #Will return top N results by InstanceCount [int]$Top=30, [switch]$MPStats, [switch]$ShowGraph ) [System.Collections.ArrayList]$arrClasses = @() # Get all MPs that were not installed OotB. $MPs = Get-SCManagementPack $MPs = $MPs | Sort-Object TimeCreated | Select-Object -Last ($MPs.Count - 98) $Classes = Get-SCClass -ManagementPack $MPs | Where-Object {($_.Singleton -eq $false) -AND ($_.Abstract -eq $false) } Class ClassStats{ [int]$Instances [string]$ClassName [string]$ClassDisplayName [string]$MPName } ForEach ($Class in $Classes) { $Instances = $Class | Get-SCOMClassInstance [ClassStats]$obj = @{ Instances = $Instances.Count ClassName = $Class.Name ClassDisplayName = $Class.DisplayName MPName = ($Class.Identifier.Domain[0]) } $Null = $arrClasses.Add($obj) } If ($MPStats){ $Results = (($arrClasses | Group-Object -Property MPName ) | Select-Object @{Name='MPName';E={$_.Name} },@{Name='TotalInstances';E={($_.Group.Instances | Measure-Object -Sum).Sum}} |Sort-Object TotalInstances -Descending | Select-Object -First $Top) If ([bool]$ShowGraph) { $Results | Out-ConsoleGraph -Property TotalInstances -Columns TotalInstances,MPName } Else { Return $Results } } Else{ $Results = ($arrClasses | Sort-Object Instances -Descending | Select-Object -First $Top) If ([bool]$ShowGraph) { $Results | Out-ConsoleGraph -Property Instances -Columns Instances,ClassName } Else { Return $Results } } } |