<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Scott Hinsley's WebLog : MOM 2005</title><link>http://blogs.technet.com/shinsley/archive/tags/MOM+2005/default.aspx</link><description>Tags: MOM 2005</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>MOM 2005: Alert when a percentage of machines in a computer group fail to respond to ping requests.</title><link>http://blogs.technet.com/shinsley/archive/2006/12/01/mom-2005-generate-alerts-when-a-percentage-of-machines-in-a-computer-group-fails-to-respond-to-ping-requests.aspx</link><pubDate>Sat, 02 Dec 2006 00:39:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:537583</guid><dc:creator>shinsley</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/shinsley/comments/537583.aspx</comments><wfw:commentRss>http://blogs.technet.com/shinsley/commentrss.aspx?PostID=537583</wfw:commentRss><wfw:comment>http://blogs.technet.com/shinsley/rsscomments.aspx?PostID=537583</wfw:comment><description>&lt;P&gt;I&amp;nbsp;was recently asked if it would be possible to generate an alert when a certain number of machines in a computer group become unreachable.&amp;nbsp; MOM already&amp;nbsp;generates alerts when an agent fails to heartbeat and even notes&amp;nbsp;when the heartbeat failure is accompanied by ping failures.&amp;nbsp; This is great to the owner of&amp;nbsp;an individual system, but what if we're interested in something a bit more pandemic?&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Terminal or web&amp;nbsp;farm can have hundreds or even thousands of individual servers that are part of a larger collective.&amp;nbsp;Failure of an individual machine&amp;nbsp;wouldn't cause the average&amp;nbsp; person's blood pressure to go up.&amp;nbsp; On the other hand, how can we tell when a large number of systems within&amp;nbsp;a web farm goes down without watching all those individual heartbeat alerts?&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Approach&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Let use information that MOM already collects to avoid increasing network traffic or database size.&amp;nbsp; For our purposes, the information we need comes in the form of active&amp;nbsp;Heartbeat failures&amp;nbsp;that include&amp;nbsp;ping failures.&amp;nbsp; We'll need to do a few things:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Create a computer group containing machines to be monitored for ping failures,&lt;/LI&gt;
&lt;LI&gt;Create a script to monitor systems in your new group for ping failures,&lt;/LI&gt;
&lt;LI&gt;Create a rule to run your new script.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;1 - Create and Populate MOM Computer Groups&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;If you already have a computer group in mind, great move on to step two.&amp;nbsp; If you don't have a computer group or you have one that has to be manually populated, open the MOM&amp;nbsp;Administrator console and&amp;nbsp;read on:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;a)&amp;nbsp;From the Admin console, right-click Computer Groups and create a new computer group.&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;b) Pause to appreciate the welcome screen then click Next,&lt;/P&gt;
&lt;P mce_keep="true"&gt;c) Give your new computer group a meaningful name and description before clicking Next,&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;Example: Terminal Server Farm A&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;d) Pause once more to realize that laziness is indeed the mother of invention.&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;The next few pages offer several option to automate membership of your newly created computer group.&amp;nbsp; You can use&amp;nbsp;manual inclusion/exclusion,&amp;nbsp;name searches using filters, wild-cards and regular expressions or my personal favorite; formulas. &lt;/P&gt;
&lt;P mce_keep="true"&gt;e) Click next about 5 times until you come to the formulas page&lt;/P&gt;
&lt;P mce_keep="true"&gt;f) Select &lt;EM&gt;Specify a formula for this computer group, &lt;/EM&gt;click &lt;EM&gt;Attribute &lt;/EM&gt;and&lt;EM&gt;&amp;nbsp;New.&amp;nbsp; &lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;g) Create a new attribute by using the controls to browse the local or a remote registry.&amp;nbsp; Select the key or value to be used to identify machines that could be used to identify&amp;nbsp;systems that should belong in your new computer group. Really, it's that easy!&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;Tip: Do you have your own custom registry keys such as application service or server build markers?&amp;nbsp; You can add your own custom registry keys to be used during attribute discovery or use any other key or value that is unique to this particular collection of computers that belong in the new group.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Example: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;HKLM\Software\XYZSoftware&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;HKLM\System\CurrentControlSet\Services\MyCrashtasticCustomApplication&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;For additional information on creating computer groups see &lt;EM&gt;&lt;A class="" title="Creating Computer Groups" href="http://www.microsoft.com/technet/prodtechnol/mom/mom2005/Library/3183dab2-2eb6-41d6-9af5-2cec4d025fd4.mspx" mce_href="http://www.microsoft.com/technet/prodtechnol/mom/mom2005/Library/3183dab2-2eb6-41d6-9af5-2cec4d025fd4.mspx"&gt;Creating Computer Groups&lt;/A&gt;&lt;/EM&gt; in the MOM&amp;nbsp; 2005 Management Pack Developers Guide.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;&lt;EM&gt;2&amp;nbsp;- Create&amp;nbsp;a script to monitor active ping failure for computer in a given computer group.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;MOM does a lot of the work for us...&amp;nbsp;The number of systems within a computer group and anything we could possible want to know about the alerts is in the OnePoint database.&amp;nbsp; All we need is a little t-SQL and VBScript.&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;a) Locate the Scripts folder, right-click and choose New Script&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;b) Provide a name, description and language and click next.&amp;nbsp; In this case, I'm using VBScript...&lt;/P&gt;
&lt;P mce_keep="true"&gt;c)&amp;nbsp;Insert your script and click next...&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;The following is provided as an example:&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;'*************************************************************************************************&lt;BR&gt;'*percentFailed.vs&amp;nbsp; &lt;BR&gt;'* &lt;BR&gt;'* Written by:&amp;nbsp;Scott W. Hinsley&lt;BR&gt;'* Date:&amp;nbsp;11/29/06&lt;BR&gt;'*&amp;nbsp;&lt;BR&gt;'* Requirements:&lt;BR&gt;'*&lt;BR&gt;'* - MOM 2005&lt;BR&gt;'* - Script Parameters:&lt;BR&gt;'*&amp;nbsp;MOM_COMPUTER_GROUP_NAME &lt;BR&gt;'*&amp;nbsp;&amp;nbsp;MOM Computer Group to be monitored for % ping failure.&lt;BR&gt;'*&amp;nbsp;PERCENT_FAILED_THRESHOLD&lt;BR&gt;'*&amp;nbsp;&amp;nbsp;Failure threshold expressed as a percentage of system in MOM_COMPUTER_GROUP at &lt;BR&gt;'*&amp;nbsp;&amp;nbsp;which an alert should be generated.&amp;nbsp; Expressed in a range of 1 to 100.&lt;BR&gt;'*&amp;nbsp;ONEPOINT_SERVER&lt;BR&gt;'*&amp;nbsp;&amp;nbsp;Name of SQL Server hosting the OnePoint database.&amp;nbsp; &lt;BR&gt;'*&lt;BR&gt;'* Provided "AS IS" without warranty. &lt;BR&gt;'*&lt;BR&gt;'*************************************************************************************************&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;Option Explicit&lt;BR&gt;On Error Resume Next&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;Dim strMomComputerGroupName&lt;BR&gt;Dim strPercentFailedThreshold&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;'Script Parameters&lt;BR&gt;strMomComputerGroupName = ScriptContext.Parameters.Get("MOM_COMPUTER_GROUP_NAME")&lt;BR&gt;strPercentFailedThreshold = ScriptContext.Parameters.Get("PERCENT_FAILED_THRESHOLD")&lt;BR&gt;strOnePointServer = ScriptContext.Parameters.Get("ONEPOINT_SERVER")&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;' Alert Constants&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;CONST ALERT_DESCRIPTION_STRING = "'% does not respond %'"&lt;BR&gt;CONST ALERT_RESOLVED = 255&lt;BR&gt;CONST ALERT_INFORMATION = 20&lt;BR&gt;CONST ALERT_WARNING = 30&lt;BR&gt;CONST ALERT_ERRROR = 40 &lt;BR&gt;CONST ALERT_CRITICALERROR = 50&lt;BR&gt;CONST ALERT_SERVICEUNAVAILABLE = 70&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;'Database Constants&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;CONST adOpenStatic = 3&lt;BR&gt;CONST adLockOptimistic = 3&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;Dim strQuery&lt;BR&gt;Dim dblPercentFailed&lt;BR&gt;Dim strAlertDescription&lt;BR&gt;Dim strAlertName&lt;BR&gt;Dim strName&lt;BR&gt;Dim intLevel&lt;BR&gt;Dim strDescription&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;'ADO variables&lt;BR&gt;Dim objConnection&lt;BR&gt;Dim objRecordSet&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;'strQuery: &amp;nbsp;Contains query used to get MOM_COMPUTER_GROUP member count&lt;BR&gt;' &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;and the number of active heartbeat failures with ping &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;failures. Used to form percentage to be compared with &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PERCENT_FAILED_THRESHOLD.&lt;BR&gt;'&lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Consider making strQuery a stored procedure to enhance &lt;BR&gt;'&amp;nbsp;&amp;nbsp;performance and code effeciency.&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;strQuery = "DECLARE" &amp;amp; _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " @vComputerGroupGUID NVARCHAR(39)," &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " @SearchString NVARCHAR(21)," &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " @vExcludeResolutionState NVARCHAR(3)," &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " @PingFailCount DECIMAL(4,0)," &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;" @ComputersInGroup DECIMAL(4,0)," &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " @vComputerGroupName NVARCHAR(100)," &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " @PercentFailed DECIMAL(3,2)" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;" SET @vComputerGroupName = " &amp;amp; "'" &amp;amp; strMomComputerGroupName &amp;amp; "'" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;" SET @SearchString = " &amp;amp; ALERT_DESCRIPTION_STRING &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;" SET @vExcludeResolutionState = " &amp;amp; ALERT_RESOLVED &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;" SET @vComputerGroupGUID =" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; " (SELECT GUID" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;" FROM [OnePoint].[dbo].MSFT_ComputerGroup" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;" WHERE [OnePoint].[dbo].MSFT_ComputerGroup.Name = @vComputerGroupName)" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;" SET @PingFailCount =" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; " (SELECT COUNT([OnePoint].[dbo].[SDKAlertView].ComputerName) AS ActiveCount" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; " FROM [OnePoint].[dbo].[SDKAlertView]" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;" INNER JOIN [OnePoint].[dbo].[SDKComputerToComputerGroupView]" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " ON [OnePoint].[dbo].[SDKAlertView].ComputerName =" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; " [OnePoint].[dbo].[SDKComputerToComputerGroupView].ComputerName" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;" WHERE [OnePoint].[dbo].[SDKComputerToComputerGroupView].ComputerGroupGUID =" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " @vComputerGroupGUID" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " AND [OnePoint].[dbo].[SDKAlertView].Description LIKE @SearchString" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; " AND [OnePoint].[dbo].[SDKAlertView].ResolutionState &amp;lt;&amp;gt; @vExcludeResolutionState)" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;" SET @ComputersInGroup = (SELECT NumberOfComputers" &amp;amp; _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;" FROM [OnePoint].[dbo].[ComputerGroupView]" &amp;amp; _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;" WHERE ComputerGroupName = @vComputerGroupName)" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;" SET @PercentFailed = (SELECT @PingFailCount/@ComputersInGroup)*100" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;" SELECT @PercentFailed AS PercentFailed"&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;'Creating the data connection...&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;Set objConnection = CreateObject("ADODB.Connection")&lt;BR&gt;Set objRecordSet = CreateObject("ADODB.Recordset")&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;'The following connection string demonstrates using a non-trusted SQL account. &lt;BR&gt;'Update credentials for your particular needs.&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;objConnection.Open _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Provider=SQLOLEDB;Data Source=" &amp;amp; ONEPOINT_SERVER &amp;amp; ";" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Trusted_Connection=No;Initial Catalog=OnePoint;" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "User ID=&amp;lt;ReadOnlySQLAccount&amp;gt;;Password=&amp;lt;password&amp;gt;;"&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;objRecordSet.Open strQuery, objConnection, adOpenStatic, adLockOptimistic&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;objRecordSet.MoveFirst&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;dblPercentFailed = CDbl(objRecordSet.Fields.Item("PercentFailed"))&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;'Compare value retrieved with strQuery with PERCENT_FAILED_THRESHOLD&lt;BR&gt;'Alert if PERCENT_FAILED_THRESHOLD is exceeded.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;If dblPercentFailed &amp;gt; strPercentFailedThreshold Then&lt;BR&gt;&amp;nbsp;strAlertDescription = dblPercentFailed &amp;amp; "%" &amp;amp; " of systems in " &amp;amp; strMomComputerGroupName &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;" failed to respond to ping attempts.&amp;nbsp; This is greater than the" &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;" defined threshold of: " &amp;amp; strPercentFailedThreshold &amp;amp; "%"&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;strAlertName = strMomComputerGroupName &amp;amp; ": Ping failure threshold exceeded."&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;AlertRaise strAlertName, ALERT_CRITICALERROR, strAlertDescription&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;&amp;nbsp;Else&lt;BR&gt;End If&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;'AlertRaise is Called if PERCENT_FAILED_THRESHOLD&lt;BR&gt;'exceded.&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;Sub AlertRaise(strName, intLevel, strDescription)&lt;BR&gt;&amp;nbsp; Dim objAlert&lt;BR&gt;&amp;nbsp; Set objAlert = ScriptContext.CreateAlert()&lt;BR&gt;&amp;nbsp; objAlert.Name = strName&lt;BR&gt;&amp;nbsp; objAlert.AlertLevel = intLevel&lt;BR&gt;&amp;nbsp; objAlert.Owner = "[unassigned]"&lt;BR&gt;&amp;nbsp; objAlert.ResolutionState = 0&lt;BR&gt;&amp;nbsp; objAlert.Description = strDescription&lt;BR&gt;&amp;nbsp; ScriptContext.Submit(objAlert)&lt;BR&gt;&amp;nbsp; &lt;BR&gt;End Sub&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;'* End VBScript&lt;BR&gt;'*************************************************************************************************&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;d) Add any necessary parameters to your script. In this case, I use the following parameters:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;MOM_COMPUTER_GROUP_NAME &lt;BR&gt;PERCENT_FAILED_THRESHOLD&lt;BR&gt;ONEPOINT_SERVER&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;* See code comments for details.&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;&lt;EM&gt;3&amp;nbsp;- Create&amp;nbsp;a rule that will run the script on a scheduled interval. &lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Find an appropriate spot for your new rule.&amp;nbsp;You may want to create a new rule group... I'll leave that to you.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;a)&amp;nbsp;Right-click&amp;nbsp;&lt;EM&gt;Event Rules&lt;/EM&gt; and select &lt;EM&gt;Alert or Respond&lt;/EM&gt; &lt;EM&gt;to an Event.&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;b) Select&lt;EM&gt; New&lt;/EM&gt; | &lt;EM&gt;Timed Event &lt;/EM&gt;| &lt;EM&gt;OK.&amp;nbsp; &lt;/EM&gt;Configure an interval texceededhat is appropriate for your needs and click OK.&lt;/P&gt;
&lt;P mce_keep="true"&gt;c) Click Next until you come to the &lt;EM&gt;Reponses&lt;/EM&gt; screen.&amp;nbsp; This is where you will put your script to work.&lt;/P&gt;
&lt;P mce_keep="true"&gt;d) On the reponses screen, select &lt;EM&gt;Add | Launch a script.&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;e) ResponsesresponsesSelect your newly created script and and configure the required parameters.&lt;/P&gt;
&lt;P mce_keep="true"&gt;f) Last but not least, complete the company knowledge and provide a descriptive name for you new rule.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=537583" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/shinsley/archive/tags/MOM+2005/default.aspx">MOM 2005</category></item></channel></rss>