I am currently using this script:
Param(
[parameter(Mandatory=$true)]
$ManagementServer,
[parameter(Mandatory=$true)]
$ManagementPackID,
[parameter(Mandatory=$true)]
$GroupID,
[parameter(Mandatory=$true)]
$GroupName
)
Write-Host "ManagementServer:"$ManagementServer
Write-Host "ManagementPackID: "$ManagementPackID
Write-Host "GroupID: "$GroupID
Write-Host "GroupName: "$GroupName
function CreateManagementPack
{
param([object]$MG, [string]$ManagementPackID)
$MPStore = New-Object Microsoft.EnterpriseManagement.Configuration.IO.ManagementPackFileStore
$MP = New-Object Microsoft.EnterpriseManagement.Configuration.ManagementPack($ManagementPackID, $ManagementPackID, (New-Object Version(1, 0, 0)), $MPStore)
$MG.ImportManagementPack($MP)
}
function XMLEncode
{
param([string]$s)
$s = $s.Replace("&", "&")
$s = $s.Replace("<", "<")
$s = $s.Replace(">", ">")
$s = $s.Replace('"', """)
$s = $s.Replace("'", "'")
return $s.ToString()
}
Write-Host "Adding SCOM Snap-in"
Add-PSSnapin Microsoft.EnterpriseManagement.OperationsManager.Client
Write-Host "Connecting to SCOM Management Group"
$ManagementServer = New-Object Microsoft.EnterpriseManagement.ManagementGroup($ManagementServer)
Write-Host "Getting MP Information and Incrementing Version"
try
{
$MP = $ManagementServer.GetManagementPacks($ManagementPackID)[0]
$VIncrement = $MP.Version.ToString().Split('.')
$VIncrement[$VIncrement.Length - 1] = ([system.int32]::Parse($VIncrement[$VIncrement.Length - 1]) + 1).ToString()
$MP.Version = ([string]::Join(".", $VIncrement))
}
catch
{
Write-Host "MP Not Found, Creating New MP"
CreateManagementPack $ManagementServer $ManagementPackID
$MP = $ManagementServer.GetManagementPacks($ManagementPackID)[0]
}
$Formula = '<MembershipRule Comment="Empty Membership Rule">' + `
'<MonitoringClass>$MPElement[Name="SCIG!Microsoft.SystemCenter.InstanceGroup"]$</MonitoringClass>' + `
'<RelationshipClass>$MPElement[Name="SCIG!Microsoft.SystemCenter.InstanceGroupContainsEntities"]$</RelationshipClass>' + `
'<Expression>' + `
'<SimpleExpression>' + `
'<ValueExpression>' + `
'<Value>True</Value>' + `
'</ValueExpression>' + `
'<Operator>Equal</Operator>' + `
'<ValueExpression>' + `
'<Value>False</Value>' + `
'</ValueExpression>' + `
'</SimpleExpression>' + `
'</Expression>' + `
'</MembershipRule>'
Write-Host "Getting Alias for the Microsoft.SystemCenter.InstanceGroup.Library Management Pack Reference"
$Alias = ($MP.References | where {$_.Value -like '*Microsoft.SystemCenter.InstanceGroup.Library*'}).key
If (!($Alias))
{
Write-Host "Management Pack Reference Not Found, Exiting"
exit
}
ElseIf ($Alias -ne 'SCIG')
{
Write-Host "Management Pack Reference Found but Alias Not Equal to SCIG. Modifying Formula"
$Formula = $Formula.Replace("SCIG", $Alias)
}
Write-Host "Creating Group"
$Group = New-Object Microsoft.EnterpriseManagement.Monitoring.CustomMonitoringObjectGroup($ManagementPackID, $GroupID, (XMLEncode -s $GroupName), $Formula)
Write-Host "Adding Group"
$MP.InsertCustomMonitoringObjectGroup($Group)
Write-Host "Script Complete"
and have a text file: (sample.txt)
ManagementServer=Test
ManagementPackID=example.test
GroupID=group1
GroupName=ThisIsFun
======================
ManagementServer=Test2
ManagementPackID=example.test2
GroupID=group2
GroupName=ThisIsFun2
I need to loop through the code and add in the text in the correct spots.