Wouldn’t it be cool if SCOM 2016 was super fast and required less resources?
SCOM 2016 is full of legacy solutions that make it bloated and slow. You can remove “most” of these solutions if your not going to use them anyway?
SCOM was created in a very modular fashion using management packs to add features over the years.
After careful analysis I created the following PowerShell script to remove many of the management packs that slow down SCOM.
I have broken the script into pieces so you can remove any parts that you want to keep. The script was created using a clean SCOM 2016 install. If you have been using SCOM 2016 for a long time or have an upgraded SCOM environment you may have some additional dependencies in unsealed MPs you created.
If you find you need a solution in the future. Simply add the MPs back from the installation media.
Download: https://www.scom2k7.com/downloads/SCOMCoreMPRemoval.zip
The script:
$MSServer = "yourMSServer" Import-Module -Name "OperationsManager" New-SCManagementGroupConnection -ComputerName:$MSServer #Summary Dashboard Get-SCOMManagementPack -Name "Microsoft.SystemCenter.OperationsManager.SummaryDashboard" | Remove-SCOMManagementPack #AEM Get-SCOMManagementPack -Name "Microsoft.SystemCenter.ClientMonitoring.Overrides" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.ClientMonitoring.Internal" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.ClientMonitoring.Views.Internal" | Remove-SCOMManagementPack #Client Monitoring Get-SCOMManagementPack -Name "Microsoft.Windows.Client.NetworkDiscovery" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.Windows.Client.Library" | Remove-SCOMManagementPack #OMS-Advisor - Only works if Advisor was never configured Get-SCOMManagementPack -Name "Microsoft.SystemCenter.Advisor" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.Advisor.Resources.ENU" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.Advisor.Internal" | Remove-SCOMManagementPack #360 Dashboards Get-SCOMManagementPack -Name "Microsoft.SystemCenter.ApplicationMonitoring.360.SLA" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.ApplicationMonitoring.360.Template.Dashboards" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.ApplicationMonitoring.360.Template.Library" | Remove-SCOMManagementPack #Unix-Linux Get-SCOMManagementPack -Name "Microsoft.Unix.Views" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.Unix.ShellCommand.Library" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.Unix.Process.Library" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.Unix.LogFile.Library" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.Unix.ConsoleLibrary" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.Unix.Image.Library" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.Unix.Library" | Remove-SCOMManagementPack #Windows Server Network Get-SCOMManagementPack -Name "Microsoft.Windows.Server.NetworkDiscovery" | Remove-SCOMManagementPack #Network Devices *Note Can get rid of Microsoft.SystemCenter.NetworkDevice.Library because of Microsoft.SystemCenter.Internal.UI.Tasks dependency Get-SCOMManagementPack -Name "Microsoft.SystemCenter.Visualization.Network.Dashboard" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.Visualization.Network.Library" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "System.NetworkManagement.Monitoring" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "System.NetworkManagement.Templates" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.NetworkDiscovery.Internal" | Remove-SCOMManagementPack #MP Recommendations Get-SCOMManagementPack -Name "Microsoft.SystemCenter.ManagementPack.Recommendations" | Remove-SCOMManagementPack #Baselineing Tasks Get-SCOMManagementPack -Name "System.BaseliningTasks.Library" | Remove-SCOMManagementPack #Process Monitoring Template Get-SCOMManagementPack -Name "Microsoft.SystemCenter.ProcessMonitoring.Library" | Remove-SCOMManagementPack #Summary Dashboard Template Get-SCOMManagementPack -Name "Microsoft.SystemCenter.GTM.Summary.Dashboard.Template" | Remove-SCOMManagementPack #Web Application Availability Monitoring - Note Many customers might still use this. Get-SCOMManagementPack -Name "Microsoft.SystemCenter.WebApplicationSolutions.Library.Resources.ENU" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.WebApplicationSolutions.Library" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.WebApplicationTest.Library" | Remove-SCOMManagementPack #Service Level Report Library Get-SCOMManagementPack -Name "Microsoft.SystemCenter.DataWarehouse.ServiceLevel.Report.Library" | Remove-SCOMManagementPack #APM Get-SCOMManagementPack -Name "Microsoft.SystemCenter.Apm.NTServices" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.Apm.Wcf" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.Apm.Web" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.DataWarehouse.ApmReports.Library" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.Apm.Infrastructure.Monitoring" | Remove-SCOMManagementPack Get-SCOMManagementPack -Name "Microsoft.SystemCenter.Apm.Library" | Remove-SCOMManagementPack #APM Part 2 -- Need to remove secure reference override from "Microsoft.SystemCenter.SecureReferenceOverride" first Get-SCOMManagementPack -Name "Microsoft.SystemCenter.SecureReferenceOverride" | Export-SCOMManagementPack -Path "c:\temp" <# Delete --Start <Reference Alias="SystemCenter3"> <ID>Microsoft.SystemCenter.Apm.Infrastructure</ID> <Version>7.2.11719.0</Version> <PublicKeyToken>31bf3856ad364e35</PublicKeyToken> </Reference> <SecureReferenceOverride ID="SecureOverridec1bf9736_b0e5_bae6_06d5_cc04a9472e5f" Context="SystemCenter3!Microsoft.SystemCenter.Apm.DataTransferService" Enforced="false" SecureReference="SystemCenter1!Microsoft.SystemCenter.DataWarehouse.ActionAccount"> <Value>0092C57E665DB6D9AE7FAD6FE9925AF96E41065C6000000000000000000000000000000000000000</Value> </SecureReferenceOverride> --End #> Import-SCOMManagementPack -Fullname "C:\Temp\Microsoft.SystemCenter.SecureReferenceOverride.xml" #This will only work if you have removed the secure reference override Get-SCOMManagementPack -Name "Microsoft.SystemCenter.Apm.Infrastructure" | Remove-SCOMManagementPack
For APM: You will need to manually remove the Secure Reference Override before you can delete “Microsoft.SystemCenter.Apm.Infrastructure” mp. Notes in are in the script as to what needs to be deleted.
My Core Environment:
Authoring Wizard – Much cleaner
Discovery Wizard – Notice Unix is gone
One of the most valuable management packs to remove would be the “System.NetworkManagement.Library” MP. But removing this MP breaks the Windows Computer discovery wizard.
Any issues, comments or ideas for removing additional management packs please leave them in the comments.
Thank you Tim,
this looks quite interesting and I will definitely remove some of the listed MPs.
Although the Management Packs are in the installation media I will export all of them first so I need not to search in case I have to reimport them.
As I already removed the APM MPs in the past I did not like to edit the SecureReferenceOverride MP manually.
There are a couple of blogpost how to achieve that with PS.
APM:
To delete the Microsoft.SystemCenter.Apm.Infrastructure MP you need to remove a RunAs account profile association (Operations Manager APM Data Transfer Service) and then clean up the SecureReference library (https://blogs.technet.microsoft.com/kevinholman/2017/08/05/reinstalling-your-scom-agents-with-the-noapm-switch/).
Therefore I first removed the profile association and the reference and afterwards all APM MPs.
Of course this should be tested first in a dev environment.
# remove the APM association for the Data Warehouse Account profile
$APMAccount = Get-SCOMRunAsAccount -Name ‘Data Warehouse Action Account’
$APMProfile = Get-SCOMRunAsProfile -DisplayName ‘Data Warehouse Account’
$APMClass = Get-SCOMClass -Name ‘Microsoft.SystemCenter.Apm.DataTransferService’
Set-SCOMRunAsProfile -Action ‘Remove’ -Profile $APMProfile -Account $APMAccount -Class $APMClass
# export the Microsoft.SystemCenter.SecureReferenceOverride MP
$MP = Get-SCOMManagementPack -Name Microsoft.SystemCenter.SecureReferenceOverride
$MP | Export-SCOMManagementPack -Path C:\temp\
# delete the reference to the Microsoft.SystemCenter.Apm.Infrastructure MP
$MP.References
$MP.References.Remove(‘SystemCenter3’)
$MP.Verify()
$MP.AcceptChanges()
# remove APM Management Packs
$delMPs = Get-SCOMManagementPack | Where-Object {$_.Name -like ‘*apm*’}
$delMPs | Format-Table -AutoSize
$delMPs | Remove-SCOMManagementPack
At the end Remove-SCOMDisabledClassInstance should be run to remove all these discovered instances that are not used anymore.
Best regards,
Konstantin
For SCOM 2012 R2 the ‘System.NetworkManagement.Reports’ needs to be deleted first because it depend on the ‘System.NetworkManagement.Monitoring’ MP.
Why not deleting it for SCOM 2016 as well?
FYI: I had a customer remove the “System.NetworkManagement.Reports.MP” as part of the tuning of a new SCOM 2016 Management Group. They had not yet installed SCOM Reporting, and found that install would fail, roll back and break SSRS. We had to run ResetSRS.exe to fix reporting services, reimport both the “System.NetworkManagement.Monitoring.MP” and “System.NetworkManagement.Reports.MP” , then we could successfully install SCOM Reporting. The install of SCOM Reporting is looking for the Network Management Reports in the Data Warehouse and will fail if it is not there.