Skip to content

Commit 04abc18

Browse files
Still a work in progress, but will handle some basic Unsealed MPs
1 parent ae8872b commit 04abc18

File tree

1 file changed

+47
-18
lines changed

1 file changed

+47
-18
lines changed

Powershell/Remove-MPDependencies-v1.ps1

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ PROCESS
103103
}
104104
Write-Output "$(Time-Stamp)Backing Up the following: $($ManagementPack.DisplayName)"
105105
$ManagementPack | Export-SCOMManagementPack -Path $ExportPath -ErrorAction Stop | Out-Null
106-
Write-Output "$(Time-Stamp)Saved to: $ExportPath\$($ManagementPack.Name).xml"
106+
Write-Output "$(Time-Stamp)Saved to: $ExportPath\$($ManagementPack.Name).backup.xml"
107107
if ($Unsealed)
108108
{
109109
Write-Output "$(Time-Stamp)Attempting to remove related data in the Unsealed Management Pack: $ExportPath\$($ManagementPack.Name).xml"
@@ -128,6 +128,20 @@ PROCESS
128128
$nodes += $Override | Select-Object -ExpandProperty Node
129129
}
130130

131+
#Find all unitmonitors
132+
$Monitors = $xmlData.ChildNodes | Select-Xml -Xpath "//Monitors"
133+
foreach ($Monitor in $Monitors)
134+
{
135+
$nodes += $Monitor | Select-Object -ExpandProperty Node
136+
}
137+
138+
#Find all assemblies
139+
$Managed = $xmlData.ChildNodes | Select-Xml -Xpath "//Managed"
140+
foreach ($Item in $Managed)
141+
{
142+
$nodes += $Item | Select-Object -ExpandProperty Node
143+
}
144+
131145
foreach ($node in $nodes)
132146
{
133147
$aliasFound = $node.ChildNodes.Where{ $_.Context -match "$($reference.Alias)" }
@@ -140,29 +154,30 @@ PROCESS
140154
}
141155
[void]$reference.ParentNode.RemoveChild($reference)
142156
$languagePacks = $xmlData.ManagementPack.LanguagePacks.LanguagePack.DisplayStrings.DisplayString | Where{ $_.ElementID -like $referencingId }
143-
[void]$languagePacks.ParentNode.RemoveChild($languagePacks)
157+
try { [void]$languagePacks.ParentNode.RemoveChild($languagePacks) }
158+
catch { Write-Verbose "Nothing found in Language Packs inside XML." }
144159

145160
}
146161
$xmlData.Save("$ExportPath\$($ManagementPack.Name).xml")
147162
Write-Output "$(Time-Stamp)Importing the modified Unsealed Management Pack: $ExportPath\$($ManagementPack.Name).xml"
148-
Import-SCOMManagementPack -FullName "$ExportPath\$($ManagementPack.Name).xml" | Out-Null
149-
<#
150-
151-
foreach ($alias in $aliases)
163+
Import-SCManagementPack -FullName "$ExportPath\$($ManagementPack.Name).xml" -ErrorAction SilentlyContinue
164+
if ($ManagementPack.Name -in $unsealedMPs)
152165
{
153-
$xmlData.ChildNodes.Monitoring.Overrides.MonitorPropertyOverride | Where { $($_.Context -split '!')[0] -eq $alias } | ForEach-Object { $removed += $_.ParentNode.InnerXML; $id = $_.Id; [void]$_.ParentNode.RemoveChild($_) }
154-
$xmlData.ChildNodes.Monitoring.Overrides.DiscoveryConfigurationOverride | Where { $($_.Context -split '!')[0] -eq $alias } | ForEach-Object { $removed += $_.ParentNode.InnerXML; $id += $_.Id; [void]$_.ParentNode.RemoveChild($_) }
155-
$xmlData.ChildNodes.Monitoring.Overrides.RulePropertyOverride | Where { $($_.Context -split '!')[0] -eq $alias } | ForEach-Object { $removed += $_.ParentNode.InnerXML; $id += $_.Id; [void]$_.ParentNode.RemoveChild($_) }
166+
#Remove from master list
167+
$unsealedMPs.Remove($ManagementPack.Name)
156168
}
157-
#>
158-
159169
}
160170
if ($Sealed)
161171
{
162172
#Start of Inner Remove MP Function
163173
Write-Output "$(Time-Stamp)Removing the Sealed Management Pack: $($ManagementPack.DisplayName)"
174+
Remove-SCManagementPack -ManagementPack $ManagementPack -Confirm:$false -ErrorAction Stop
175+
if ($ManagementPack.Name -in $sealedMPs)
176+
{
177+
#Remove from master list
178+
$sealedMPs.Remove($ManagementPack.Name)
179+
}
164180
}
165-
#Remove-SCManagementPack -ManagementPack $ManagementPack -Confirm:$false -ErrorAction Stop
166181
sleep 10
167182
}
168183
function Inner-GetMPRecurse
@@ -212,18 +227,32 @@ PROCESS
212227
try
213228
{
214229

215-
foreach ($MP in $sealedMPs)
230+
foreach ($sealedMP in $sealedMPs)
231+
{
232+
Write-Output @"
233+
===========================================================================================
234+
$sealedMP
235+
===========================================================================================
236+
"@
237+
Inner-GetMPRecurse -ManagementPack $sealedMP
238+
<#
239+
Write-Output "$(Time-Stamp)Removing the following Sealed Management Pack: $($sealedMP.DisplayName)"
240+
Remove-SCManagementPack -ManagementPack $sealedMP -ErrorAction Stop
241+
Write-Output "$(Time-Stamp)Removed the following Sealed Management Pack: $($sealedMP.DisplayName)"
242+
#>
243+
}
244+
foreach ($unsealedMP in $unsealedMPs)
216245
{
217246
Write-Output @"
218247
===========================================================================================
219-
$MP
248+
$unsealedMP
220249
===========================================================================================
221250
"@
222-
Inner-GetMPRecurse -ManagementPack $MP
251+
Inner-GetMPRecurse -ManagementPack $unsealedMP
223252
<#
224-
Write-Output "$(Time-Stamp)Removing the following Sealed Management Pack: $($MP.DisplayName)"
225-
Remove-SCManagementPack -ManagementPack $MP -ErrorAction Stop
226-
Write-Output "$(Time-Stamp)Removed the following Sealed Management Pack: $($MP.DisplayName)"
253+
Write-Output "$(Time-Stamp)Removing the following Sealed Management Pack: $($unsealedMP.DisplayName)"
254+
Remove-SCManagementPack -ManagementPack $unsealedMP -ErrorAction Stop
255+
Write-Output "$(Time-Stamp)Removed the following Sealed Management Pack: $($unsealedMP.DisplayName)"
227256
#>
228257
}
229258
}

0 commit comments

Comments
 (0)