OpsMgr 2012 Self Maintenance Convert All Agents to Remote Manageable Probe

OpsMgr.2012.Self.Maintenance.Convert.All.Agents.Remote.Manageable.Probe (ProbeActionModuleType)

Element properties:

TypeProbeActionModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
PSScript ProbeAction Microsoft.Windows.PowerShellPropertyBagTriggerOnlyProbe Default

Overrideable Parameters:

IDParameterTypeSelector
SQLQueryTimeoutSecondsstring$Config/SQLQueryTimeoutSeconds$
TimeoutSecondsstring$Config/TimeoutSeconds$

Source Code:

<ProbeActionModuleType ID="OpsMgr.2012.Self.Maintenance.Convert.All.Agents.Remote.Manageable.Probe" Accessibility="Internal" Batching="false" PassThrough="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="SQLQueryTimeoutSeconds" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="TimeoutSeconds" type="xsd:integer"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="SQLQueryTimeoutSeconds" Selector="$Config/SQLQueryTimeoutSeconds$" ParameterType="string"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="string"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="PSScript" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagTriggerOnlyProbe">
<ScriptName>ConvertTo-RemoteManageableAgent.ps1</ScriptName>
<ScriptBody><Script>

#===========================================================================================
# AUTHOR: Tao Yang
# Script Name: ConvertTo-RemoteManageableAgent.ps1
# DATE: 22/08/2012
# Version: 1.0
# COMMENT: - Script to change all SCOM agents to Remote Manageable
#===========================================================================================
Param ([int]$SQLQueryTimeoutSeconds)

$SCOMSetupRegKey = "HKLM:\SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup"
$OpsDBServerName = (Get-ItemProperty $SCOMSetupRegKey -Name DatabaseServerName).DatabaseServerName
$OpsDBName = (Get-ItemProperty $SCOMSetupRegKey -Name DatabaseName).DatabaseName

#Connect to Ops DB
$conString = "Server`=$OpsDBServerName;Integrated Security=true;Initial Catalog=$OpsDBName"
$SQLCon = New-Object System.Data.SqlClient.SqlConnection
$SQLCon.ConnectionString = $conString
$SQLCon.Open()
$sqlCmd = $SQLCon.CreateCommand()

#Not Remote Mangeable agents count before update
$NoRemoteManageableCount = "select Count(*) from MT_HealthService WHERE IsManuallyInstalled = 1"
$sqlCmd.CommandTimeout=$SQLQueryTimeoutSeconds
$sqlCmd.CommandText = $NoRemoteManageableCount
$Reader = $sqlCmd.ExecuteReader()
$Counter = $Reader.FieldCount

while ($Reader.Read()) {
for ($i = 0; $i -lt $Counter; $i++) {
$BeforeCount = $Reader.GetValue($i)
}
}
$Reader.close()

#Update Agent Remote Manageable via Ops DB
If ($BeforeCount -ge 1)
{
#Update
$RemoteManageableSQLCmd = "UPDATE MT_HealthService SET IsManuallyInstalled=0 WHERE IsManuallyInstalled=1"
$sqlCmd.CommandText = $RemoteManageableSQLCmd
$SqlNonQuery = $sqlCmd.ExecuteNonQuery()

#Get After count
$sqlCmd.CommandText = $NoRemoteManageableCount
$Reader = $sqlCmd.ExecuteReader()
$Counter = $Reader.FieldCount

while ($Reader.Read()) {
for ($i = 0; $i -lt $Counter; $i++) {
$AfterCount = $Reader.GetValue($i)
}
}
$Reader.close()
} else {
$AfterCount = 0
}
$SQLCon.Close()

$NumberConverted = $BeforeCount - $AfterCount

#Prepare Property Bag
$oAPI = New-Object -ComObject "MOM.ScriptAPI"
$oBag = $oAPI.CreatePropertyBag()
$oBag.AddValue('BeforeCount', $BeforeCount)
$oBag.AddValue('AfterCount', $AfterCount)
$oBag.AddValue('NumberConverted', $NumberConverted)

#Submit property bag
#$oAPI.Return($oBag)
$oBag

</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>SQLQueryTimeoutSeconds</Name>
<Value>$Config/SQLQueryTimeoutSeconds$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="PSScript"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
<TriggerOnly>true</TriggerOnly>
</ProbeActionModuleType>