Recursively removing Management Packs
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]