As a developer working with SCOM and management packs, I have had several occasions where I have needed to remove a lot of management packs (MPs).  Unfortunately, you must remove the MPs one-at-a-time in the UI.  Granted, in a production environment you are probably not removing a lot of MPs; however, if you are developing MPs you might need to remove a lot of MPs (in my case - frequently).

For instance, during development of the JEE Application Server MPs it was not uncommon to import all 15 or 16 MPs to verify a bug.  When I learned that I might have to do this several times to resolve a bug, I quickly realized I needed to find an automated way to remove our MPs!  Back in August I posted a script to do this (along with importing all JEE MPs in a directory), but I think it the recursive delete desrves it's own posting.

The script below takes a single argument which is the case insensitve name of the Management Pack to remove.  Sometimes I have noticed that I needed to manually remove the secure references overide MP (i.e. Microsoft.SystemCenter.SecureReferenceOverride).  Sometimes the API would find and remove this, sometimes not.

Script

 

# Needed for SCOM SDK
$ipProperties = [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties()
$rootMS = "{0}.{1}" -f $ipProperties.HostName, $ipProperties.DomainName


#######################################################################
#
# Helper method that will remove the list of given Management Packs.
#
function RemoveMPsHelper
{param($mpList)
foreach ($mp in $mpList)
{
Echo " * Uninstalling $mp"
Uninstall-ManagementPack -managementpack $mp
}
}

#######################################################################
#
# Remove 'all' of the JEE MPs as well as MPs that are dependent on them.
# The remove is done by finding the base MP (Microsoft.JEE.Library) and finding
# all MPs that depend on it. This list will be presented to the user prompting
# if the user wants to continue and removing the list of presented MPs
#
function RemoveMPs
{param($mp)
Import-Module 'E:\Program Files\System Center 2012\Operations Manager\Powershell\OperationsManager\OperationsManager.psd1'

$listOfManagementPacksToRemove = Get-SCOMManagementPack -Name $mp -Recurse
$listOfManagementPacksToRemove | format-table name

$title = "Uninstall Management Packs"
$message = "Do you want to uninstall the above management packs"

$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Uninstall selected Management Packs."
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "Do not remove Management Packs."
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)

$result = $host.ui.PromptForChoice($title, $message, $options, 0)

switch ($result)
{
0 {RemoveMPsHelper $listOfManagementPacksToRemove}
1 {"Exiting without removing any management packs"}
}
}

#######################################################################
# Begin Script functionality
#
if ($args.Count -ne 1)
{
Echo "Improper command line arguments"
Echo ""
Echo "Specify a command line argument to either import or export MPs"
exit 1
}
else
{
$firstArg = $args[0]

add-pssnapin "Microsoft.EnterpriseManagement.OperationsManager.Client";
$cwd = get-location
set-location "OperationsManagerMonitoring::";
$mgConnection = new-managementGroupConnection -ConnectionString:$rootMS;

RemoveMPs $firstArg

set-location $cwd
remove-pssnapin "Microsoft.EnterpriseManagement.OperationsManager.Client";
}

Sample output

PS C:\drop> .\RecursiveRemove.ps1 microsoft.jee.library

Name
----
Tomcat.Seven.Tasks
Microsoft.JEE.Tomcat.5
Microsoft.JEE.Tomcat.6
Microsoft.JEE.Tomcat.7
Microsoft.JEE.JBoss.Library
Microsoft.JEE.Tomcat.Library
Microsoft.JEE.Library



Uninstall Management Packs
Do you want to uninstall the above management packs
[Y] Yes [N] No [?] Help (default is "Y"): y
* Uninstalling [Tomcat.Seven.Tasks, 31bf3856ad364e35, 7.3.2034.0]
* Uninstalling [Microsoft.JEE.Tomcat.5, 31bf3856ad364e35, 7.3.2034.0]
* Uninstalling [Microsoft.JEE.Tomcat.6, 31bf3856ad364e35, 7.3.2034.0]
* Uninstalling [Microsoft.JEE.Tomcat.7, 31bf3856ad364e35, 7.3.2034.0]
* Uninstalling [Microsoft.JEE.JBoss.Library, 31bf3856ad364e35, 7.3.2034.0]
* Uninstalling [Microsoft.JEE.Tomcat.Library, 31bf3856ad364e35, 7.3.2034.0]
* Uninstalling [Microsoft.JEE.Library, 31bf3856ad364e35, 7.3.2034.0]