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
    }
  }
}