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.
# 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"; }
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]