Microsoft SystemCenter OperationsManager Storage SubSystem WMI Event Provider

Microsoft.Windows.WmiEventProvider.InstanceFilterEventProvider (DataSourceModuleType)

Extension to WMI Event Provider datasource for storage subsystem that implments instance filter based on unique identifier of target storage subsystem object.

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsSystem.PrivilegedMonitoringAccount
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
WmiEventProviderDS DataSource Microsoft.Windows.WmiEventProvider Default
PA ProbeAction Microsoft.Windows.PowerShellPropertyBagProbe Default
CD ConditionDetection System.ExpressionFilter Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
PollIntervalint$Config/PollInterval$Polling Interval (sec)WMI event query polling interval.

Source Code:

<DataSourceModuleType ID="Microsoft.Windows.WmiEventProvider.InstanceFilterEventProvider" Accessibility="Internal" RunAs="System!System.PrivilegedMonitoringAccount" Batching="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TargetInstanceUniqueID" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="ComputerName" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="PollInterval" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="WQLQuery" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="TimeoutSeconds" type="xsd:integer"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="PollInterval" Selector="$Config/PollInterval$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="WmiEventProviderDS" TypeID="Windows!Microsoft.Windows.WmiEventProvider">
<NameSpace>\\$Config/ComputerName$\root\Microsoft\Windows\Storage</NameSpace>
<Query>$Config/WQLQuery$</Query>
<PollInterval>$Config/PollInterval$</PollInterval>
</DataSource>
<ProbeAction ID="PA" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagProbe">
<ScriptName>StorageFaultEventProbe.ps1</ScriptName>
<ScriptBody><Script>

Param($SourceUniqueId, $FaultId, $Reason, $FaultingObjectDescription, $RecommendedActions, $PerceivedSeverity)

$api = New-Object -comObject "MOM.ScriptAPI"
$bag = $api.CreatePropertyBag()

$bag.AddValue("SourceUniqueId", $SourceUniqueId)
$bag.AddValue("FaultId", $FaultId)
$bag.AddValue("Reason", $Reason)
$bag.AddValue("FaultingObjectDescription", $FaultingObjectDescription)
$bag.AddValue("RecommendedActions", $RecommendedActions)
#$bag.AddValue("Alert Title", $Reason)

$bag.AddValue("PerceivedSeverity", $PerceivedSeverity);

#OM Alert severity
$alertSeverity = 1; # Default for OM would be warning
if($PerceivedSeverity -eq 2)
{
$alertSeverity = 0 #Information
}
elseif(($PerceivedSeverity -eq 3) -or ($PerceivedSeverity -eq 4))
{
$alertSeverity = 1 #Warning
}
elseif(($PerceivedSeverity -ge 5))
{
$alertSeverity = 2 #Warning
}

$bag.AddValue("OM Alert Severity", $alertSeverity);

$bag.AddValue("CompositeAlertId", $FaultId + ":" + $SourceUniqueId);
$api.LogScriptEvent("StorageFaultEventProbe.ps1", 8901, 0, "Storage fault recieved:`nfault id = $FaultId`nReason = $Reason");
$bag
</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>SourceUniqueId</Name>
<Value>$Data/Property[@Name='SourceUniqueId']$</Value>
</Parameter>
<Parameter>
<Name>FaultId</Name>
<Value>$Data/Property[@Name='FaultId']$</Value>
</Parameter>
<Parameter>
<Name>Reason</Name>
<Value>$Data/Property[@Name='Reason']$</Value>
</Parameter>
<Parameter>
<Name>FaultingObjectDescription</Name>
<Value>$Data/Property[@Name='FaultingObjectDescription']$</Value>
</Parameter>
<Parameter>
<Name>RecommendedActions</Name>
<Value>$Data/Property[@Name='RecommendedActions']$</Value>
</Parameter>
<Parameter>
<Name>PerceivedSeverity</Name>
<Value>$Data/Property[@Name='PerceivedSeverity']$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
<StrictErrorHandling>true</StrictErrorHandling>
</ProbeAction>
<ConditionDetection ID="CD" TypeID="System!System.ExpressionFilter">
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='SourceUniqueId']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>$Config/TargetInstanceUniqueID$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</ConditionDetection>
</MemberModules>
<Composition>
<Node ID="CD">
<Node ID="PA">
<Node ID="WmiEventProviderDS"/>
</Node>
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
</DataSourceModuleType>