Managing status filter rules requires manipulation of arrays that are embedded in an array of objects that is itself a property of an object.

This script creates a status filter rule that causes all other status filter rules to not be evaluated if status message 4711 is received. Status message 4711 indicates that the SMS Site System Status Summarizer has detected that a storage object has less free storage space than the critical free space threshold. As a result, the created rule ensures that the remaining space is not consumed with status messages. Nothing is done with message 4711 itself.

For additional information about configuring and managing status filter rules, see the following topics in the Systems Management Server 2003 Operations Guide:

Example

On Error Resume Next
Dim objSWbemLocator
Dim ProviderLoc
Dim Location
Dim objSWbemServices
Dim objSWbemContext
Dim objSobjSWbemInst
Dim myFilterRuleName
Dim myFilterRuleArray
Dim myObjPath
Dim PropLists
Dim Rc
Dim i
Dim j
Dim intPointer1
Dim embprops
Dim tmpArray
Dim ObjEmb
Dim ObjEmbInst

Const strSiteCode = "YOURSITECODE"	' SMS Sitecode.
Const strServer = "YOURSERVERNAME"	' SMS Site Server computer name.

Set ProviderLoc = GetObject("winmgmts:{impersonationLevel=impersonate}!root/sms:SMS_ProviderLocation")

If err.number<>0 Then
	wscript.echo "Couldn't get SMS Provider"
	wscript.quit
End If

For Each Location In ProviderLoc.Instances_
	If Location.ProviderForLocalSite = True Then
		 Set objSWbemServices = GetObject("winmgmts:" & Location.NamespacePath)
	Exit For
   End If
Next

Set objSWbemContext=CreateObject("WbemScripting.SWbemNamedValueSet")
objSWbemContext.Add "SessionHandle", objSWbemServices.ExecMethod ("SMS_SiteControlFile", "GetSessionHandle").SessionHandle
objSWbemServices.ExecMethod "SMS_SiteControlFile.Filetype=1,Sitecode=""" & strSitecode & """", "Refresh", , , objSWbemContext
myObjPath ="SMS_SCI_Component.FileType=1,Itemtype=""Component"",Sitecode=""" & strSiteCode & """,ItemName=""SMS_STATUS_MANAGER|" & ucase(strServer) & """"
Set objSobjSWbemInst = objSWbemServices.Get(myObjPath, , objSWbemContext)
PropLists = objSobjSWbemInst.PropLists

'The rule details.
myFilterRuleName = "My new filter rule"
myFilterRuleArray = array( "Actions=0", "Actions Mask=16", "Stop Evaluating=1", "Code=4711" )
'Check whether the rule is already present.
Rc = 0
For i = 0 to ubound(PropLists)
	If PropLists(i).PropertyListName = "Status Filter: SMS_STATUS_MANAGER" Then
		intPointer1 = i	' Store the index, we need it later
		Rc = 1	' Set Rc to indicate that the object was found
		For j = 0 to ubound(PropLists(i).Values)	 ' Search for the filter rule
			If PropLists(i).Values(j) = myFilterRuleName Then
				Rc = 2	' Set Rc to indicate that the status filter rule was found
			End If
		Next
	End If
Next
If Not (Rc = 1) Then
	WScript.Echo "Rule has been added already or we could not find ""Status Filter: SMS_STATUS_MANAGER"""
				WScript.Quit
End If

Set embprops = objSobjSWbemInst.Properties_("PropLists")

'Add the name of the new rule to 
'the "Status Filter: SMS_STATUS_MANAGER" object.
tmparray = embprops.Value(intPointer1).Values	'copy the array (all filter rules)
redim preserve tmparray( ubound(tmparray) + 1 )	'extend array by 1 element
tmparray( ubound(tmparray) ) = myFilterRuleName	'add the new element
embprops.Value(intPointer1).Values =  tmparray	'overwrite the array (all filter rules)

'Build an embedded property.
Set ObjEmb = objSWbemServices.Get("SMS_EmbeddedPropertyList")
Set objEmbInst = ObjEmb.SpawnInstance_()
objEmbInst.PropertyListName = "Status Filter Rule: " & myFilterRuleName
objEmbInst.Values = myFilterRuleArray

'Add the rule itself (the embedded property) to the list of rules.
embprops.Value(Ubound(embprops.value) + 1) = objEmbInst
objSobjSWbemInst.Put_ , objSWbemContext

'Run SMS_SiteControlFile::Commit to update the site control file.
objSWbemServices.ExecMethod "SMS_SiteControlFile.Filetype=1,Sitecode=""" & strSitecode & """", "Commit", , , objSWbemContext
objSWbemServices.Get("SMS_SiteControlFile").ReleaseSessionHandle objSWbemContext.Item("SessionHandle").Value
objSWbemContext.Remove "SessionHandle"

Compiling the Code

  • Requires Windows 2000 Server SP2 or later.

  • Requires an SMS 2003 Site Server.

See Also