
Создание подписок (alert subscriptions) – процедура достаточно рутинная и не особо сложная. Собственно рутинность и довела меня до автоматизации процесса. Задача достаточно простая. НУжно сделать некое подобие системы эскалации инцидентов. Почему подобие? Потому что управление инцидентами это не задача для OpsMgr и в данном продукте ничего для подобной задачи изначально не предусматривалось. Но есть обходной путь, достаточно широко уже известный. Суть пути в том, что создается подписчик, создается соответствующий ему Resolution State для алертов и создается подписка с фильтром “Resolution State= наш RS”. И после этого если в консоли (или программно) изменить Resolution State – уведомление уйдет на нужный нам список рассылки. Это все просто пока у вас немного таких списков, или когда они создаются постепенно. Мне нужно было создавать их несколько десятков (то есть порядка полусотни подписчиков, столько же Resolution States и подписок). Поэтому идея делать это вручную отпала сразу же 
Сначала я получил список подписчиков. Обычный текстовый файл с названием и адресом электронной почты. Я добавил туда номера Resolution State, которые выделил каждому подписчику.
И затем создал подписчиков и Resolution States. Это просто и описывать здесь особо нечего. Что-то вроде:
$Strings = Get-Content C:\MyWork\MyFile.txt
foreach ($String in $Strings) {
$val = $String -split ","
Add-SCOMAlertResolutionState -Name $val[1] -ResolutionStateCode $val[0]
Add-SCOMNotificationSubscriber -Name "$Branch" -DeviceTable @{"Corporate Email" = $val[2]}
}А вот после этого настала пора более сложных скриптов. Вот скрипт, который я написал для создания подписок:
1: $MS="opsmgr01"
2: import-module "OperationsManager"
3:
4: New-SCOMManagementGroupConnection -computername: $MS
5:
6:
7: $subscribers = Get-SCOMNotificationSubscriber
8:
9: foreach ($Subscriber in $Subscribers) { 10:
11: $SplittedArray = $Subscriber.Name -split " - "
12:
13:
14:
15: if (($SplittedArray[1] -notmatch "All Filials") -AND ($SplittedArray[0] -notmatch "Personal") -AND ($SplittedArray[0] -notmatch "Tier")){ 16:
17: $IDTagHlp = $SplittedArray[1] -replace " "
18: $IDTag = $IDTagHlp -replace "-"
19:
20: [string]$SubsriptionName = "Subscription.Escalated.To." + $IDTag
21:
22: [string]$SubsriptionDisplayName = "Escalated To " + $SplittedArray[1]
23:
24: $string = [string]$SplittedArray[1] -replace " "
25:
26: $State = Get-SCOMAlertResolutionState -Name $String
27:
28: $RS = $State.ResolutionState
29:
30: $config = New-Object Microsoft.EnterpriseManagement.Administration.AlertChangedSubscriptionConfiguration([Microsoft.EnterpriseManagement.Administration.AlertSubscriptionConfigurationType]::Any)
31:
32: $config.criteria= "<SimpleExpression><ValueExpression><Property>ResolutionState</Property></ValueExpression><Operator>Equal</Operator><ValueExpression><Value>$($RS)</Value></ValueExpression></SimpleExpression>"
33:
34: $config.ExpirationStartTime = Get-Date
35: $config.PollingIntervalMinutes = 1
36:
37: $Description = "Alerts with the ResolutionState = " + $SplittedArray[1]
38:
39:
40:
41: Add-SCOMNotificationSubscription -Name $SubsriptionName -Criteria $config.Criteria -Description $Description -Disabled -DisplayName $SubsriptionDisplayName -OnlyOnResolutionChange -Subscriber $subscriber -Channel $Channel
42:
43: }
44:
45: }
Строки 11-18 вы должны изменить (или удалить). Подписчики у меня называются примерно так: “Local Staff – Location”. То есть в строке 11 из этого выделяется Location, в строке 15 отфильтроавваются типы подписчиков, для которых не нужно создавать такие подписки. В строках 17-18 из названий локаций убираются символы недопустимые для идентификаторов (у меня это только тире и пробел). Это не особо универсально и, возможно, я позже допишу функцию для универсального фильтра.
Disclaimer: Это не готовый универсальный скрипт. Это ПРИМЕР, который вы должны адаптировать для себя. Работать у вас “как есть” он наверняка не будет!
Это скрипт для System Center 2012 – Operations Manager. Для работы в OpsMgr 2007 (R2) вам придется его переписывать.