So use this wisely…

This script will use Out-Gridview to prompt the operator for the management pack to disable the alerts for and the override management pack to save those overrides in.

Enjoy!
Dan

First, the script to do this for all monitors:

Import-module operationsmanager

$SCOMServer = "<SCOMServerName>"
New-SCOMManagementGroupConnection -ComputerName $SCOMServer

$MPSource = get-scommanagementpack -ComputerName $SCOMServer | where {$_.Sealed -eq $True} | Out-GridView -Title "Select a single SOURCE Management Pack" -PassThru
$MPOverride = get-scommanagementpack -ComputerName $SCOMServer | where {$_.Sealed -eq $False} | Out-GridView -Title "Select a single TARGET Management Pack" -PassThru

Write-Host ""
Write-Host -ForegroundColor Red "!!!!!!! WARNING !!!!!!!"
Write-Host ""
Write-host "All Monitors in MP " $MPSource.Name "will have"
Write-Host "an override create that sets the Generate Alert value to False."
Write-Host ""
Write-Host "Overrides will be saved to" $MPOverride.name
Write-Host ""
Write-Host ""
$Proceed = Read-Host   "Type 'Apply' to continue"
If($Proceed -eq "Apply")
    {
    $Monitors=$MPSource|Get-SCOMMonitor -ComputerName $SCOMServer |?{$_.xmltag -eq "UnitMonitor"}
    ForEach($Monitor in $Monitors)
        {
        If($Monitor.AlertSettings.AlertOnState -ne $null)
            {
            $Target= Get-SCOMClass -ComputerName $SCOMServer -id $Monitor.Target.id
            $OverrideName=$Monitor.name+".Override"
            $Override = New-Object Microsoft.EnterpriseManagement.Configuration.ManagementPackMonitorPropertyOverride($MPOverride,$OverrideName)
            $Override.Monitor = $Monitor
            $Override.Property = "GenerateAlert"
            $Override.Value = "false"
            $Override.Context = $Target
            $Override.DisplayName = $OverrideName
            }
        }
    $MPOverride.Verify()
    $MPOverride.AcceptChanges() 
    Exit
    }
Else
    {
    Write-Host ""
    Write-Host "User aborted process"
    Write-Host ""
    pause
    Exit
    }

Second, the script to do this for all rules:

Import-module operationsmanager

$SCOMServer = "<SCOMServerName>"
New-SCOMManagementGroupConnection -ComputerName $SCOMServer

$MPSource = get-scommanagementpack -ComputerName $SCOMServer | where {$_.Sealed -eq $True} | Out-GridView -Title "Select a single SOURCE Management Pack" -PassThru
$MPOverride = get-scommanagementpack -ComputerName $SCOMServer | where {$_.Sealed -eq $False} | Out-GridView -Title "Select a single TARGET Management Pack" -PassThru

Write-Host ""
Write-Host -ForegroundColor Red "!!!!!!! WARNING !!!!!!!"
Write-Host ""
Write-host "All Rules in MP " $MPSource.Name "will have"
Write-Host "an override create that sets the Generate Alert value to False."
Write-Host ""
Write-Host "Overrides will be saved to" $MPOverride.name
Write-Host ""
Write-Host ""
$Proceed = Read-Host   "Type 'Apply' to continue"
If($Proceed -eq "Apply")
    {
    $Rules=$MPSource | Get-SCOMRule -ComputerName $SCOMServer | ?{$_.xmltag -eq "Rule"}
    ForEach($Rule in $Rules)
        {
        If($Rule.Enabled -ne 'True')
            {
            Disable-SCOMRule -Rule $Rule -ManagementPack $MPOverride
            }
        } 
    Exit
    }
Else
    {
    Write-Host ""
    Write-Host "User aborted process"
    Write-Host ""
    pause
    Exit
    }

1 Comment

  1. kamalrs08

    Hi Daniel,

    Thanks for the Nice post . How to disable all rules and monitors to particular SCOM Group ? please let us know the script.

    Kamal
    India

Leave A Comment