Option Explicit On Error Resume Next '--------------- 'Define here : Mail server FQDN, sender email address, Sms script path, separator Const c_MailSrv = "MAIL.POTATO.COM" Const c_MailFrom = "WASSUP@POTATO.COM" Const c_VbPath = "wscript /B C:\Vbs\MD-Sms.vbs" Const c_Sep = ";" '--------------- 'Constant values taken from WUP help Const c_WupMonUp = 1 Const c_WupMonDown = 2 Const c_WupTest= 8 Const c_WuPDevUp = 32 Const c_WupDevDown = 64 'Declarations Dim o_Args Dim r_CurrentMonitor, r_CurrentMonitorState, r_TriggerCondition, r_Device, r_WhatsUp, r_WhatsDown dim r_CriticalMonitors, r_MailTo, r_SmsTo Dim v_Now Dim a_CriticalMonitors Dim v_CriticalMonitorCount, v_isCurMonCritical, v_CountCriticalUp Dim v_MailSubject, v_MailText, v_SmsText, v_CritText, v_WhatsUp, v_WhatsDown 'Initialisations v_Now = FormatDateTime(Date, vbShortDate) & " " & FormatDateTime(Time, vbShortTime) Set o_Args = WScript.Arguments r_CurrentMonitor = o_Args(0) r_CurrentMonitorState = o_Args(1) r_TriggerCondition = CInt(o_Args(2)) r_Device = o_Args(3) r_WhatsUp = o_Args(4) r_WhatsDown = o_Args(5) r_CriticalMonitors = o_Args(6) r_MailTo = o_Args(7) r_SmsTo = o_Args(8) 'Check arguments If r_TriggerCondition = c_WupTest Then WScript.Quit 100 End If If Err Then WScript.Quit 110 End If If r_CurrentMonitor = "" Or r_CurrentMonitorState = "" Or r_Device = "" Or r_CriticalMonitors = "" Or _ (r_MailTo = "" And r_SmsTo = "") Then WScript.Quit 110 End If 'Convert the list of critical monitors to an array and count them. Add 1 to the count since arrays start at 0 a_CriticalMonitors = Split(r_CriticalMonitors, c_Sep) v_CriticalMonitorCount = UBound(a_CriticalMonitors) + 1 'v_IsCurMonCritical will equal 1 if the monitor that just changed state is a critical one v_IsCurMonCritical = f_FindCriticalMonitor(r_CurrentMonitor, a_CriticalMonitors) 'v_CountCriticalUp will equal the number of up critical monitors v_CountCriticalUp = f_FindCriticalMonitor(r_WhatsUp, a_CriticalMonitors) 'Build the mail & sms text If v_IsCurMonCritical = 1 Then v_CritText = " CRITICAL " Else v_CritText = " " End If If r_WhatsUp = "" Then v_WhatsUp = "None" Else v_WhatsUp = r_WhatsUp End If If r_WhatsDown = "" Then v_WhatsDown = "None" Else v_WhatsDown = r_WhatsDown End If v_MailSubject = "Device " & r_Device & v_CritText & " <" & r_CurrentMonitor & "> " & r_CurrentMonitorState v_MailText = "Device " & r_Device & vbNewLine v_MailText = v_MailText & "Monitor " & r_CurrentMonitor & " " & r_CurrentMonitorState & vbNewLine & vbNewLine v_MailText = v_MailText & "Up Monitors : " & v_WhatsUp & vbNewLine v_MailText = v_MailText & "Down Monitors : " & v_WhatsDown & vbNewLine & vbNewLine v_MailText = v_MailText & "Critical Monitors : " & r_CriticalMonitors & vbNewLine & vbNewLine v_MailText = v_MailText & "Mail sent by WUP2006 " & V_Now & vbNewLine v_SmsText = v_MailSubject v_SmsText = v_SmsText & " at " & v_Now 'Main testing condition Select Case r_TriggerCondition 'If all critical are up, send mail. 'Then, if current is critical, also send sms. Case c_WupMonUp If v_CountCriticalUp = v_CriticalMonitorCount Then If v_IsCurMonCritical = 1 Then If SendTheMail(c_MailFrom, r_MailTo, v_MailSubject, v_MailText, c_MailSrv) = 0 Then WScript.Quit 1001 End If If SendTheSms(r_SmsTo, v_SmsText, c_VbPath) = 0 Then WScript.Quit 2001 End If Wscript.Quit 1 Else If SendTheMail(c_MailFrom, r_MailTo, v_MailSubject, v_MailText, c_MailSrv) = 0 Then WScript.Quit 1002 End If WScript.Quit 2 End if Else Wscript.Quit 3 End If Case c_WupMonDown If v_IsCurMonCritical = 1 Then If v_CountCriticalUp = (v_CriticalMonitorCount - 1) Then If SendTheMail(c_MailFrom, r_MailTo, v_MailSubject, v_MailText, c_MailSrv) = 0 Then WScript.Quit 1004 End If If SendTheSms(r_SmsTo, v_SmsText, c_VbPath) = 0 Then WScript.Quit 2004 End If Wscript.Quit 4 Else Wscript.Quit 5 End If Else If v_CountCriticalUp = v_CriticalMonitorCount Then If SendTheMail(c_MailFrom, r_MailTo, v_MailSubject, v_MailText, c_MailSrv) = 0 Then WScript.Quit 1006 End If Wscript.Quit 6 Else Wscript.Quit 7 End If End If Case c_WuPDevUp If SendTheMail(c_MailFrom, r_MailTo, v_MailSubject, v_MailText, c_MailSrv) = 0 Then WScript.Quit 1008 End If Wscript.Quit 8 Case c_WupDevDown If SendTheMail(c_MailFrom, r_MailTo, v_MailSubject, v_MailText, c_MailSrv) = 0 Then WScript.Quit 1009 End If Wscript.Quit 9 Case Else WScript.Quit 120 End Select 'Parameters ' P_From : String containing email sender address ' P_To : String containing one or more recipients ' P_Subject : String containing mail subject ' P_Text : String containing mail body ' P_MailServer : Smtp server fqdn 'Returns ' 0 if mail was not sent ' 1 if mail was sent Function SendTheMail (p_From, p_To, p_Subject, p_Text, p_MailServer) Dim o_Email SendTheMail = 1 If p_From = "" Or p_To = "" Or p_Subject = "" Or p_Text = "" Or p_MailServer = "" Then SendTheMail = 0 Exit Function End If Set o_Email = CreateObject("CDO.Message") With o_Email .From = p_From .To = p_To .Subject = p_Subject .Textbody = p_Text .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = p_MailServer .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .Configuration.Fields.Update .Send End With If Err Then SendTheMail = 0 Exit Function End If End Function 'Parameters ' p_Monitors : List of active monitor names, separated with a ";" ' p_CritMonArray : Array of active monitor names 'Returns ' Number of p_Monitors items found in p_CritMonArray Function f_FindCriticalMonitor(p_Monitors, p_CritMonArray) Dim i_BrowseArray f_FindCriticalMonitor = 0 For i_BrowseArray = LBound(p_CritMonArray) to UBound(p_CritMonArray) If InStr(UCase(p_Monitors), UCase(p_CritMonArray(i_BrowseArray))) <> 0 Then f_FindCriticalMonitor = f_FindCriticalMonitor + 1 End If Next End Function 'Parameters ' P_SmsTo : String containing one or more Sms recipients ' P_Text : String containing Sms body 'Returns ' 0 if sms was not sent ' 1 if sms was sent Function SendTheSms (p_SmsTo, p_Text, p_VbPath) Dim o_Shell, o_Exec, v_CmdLine v_CmdLine = p_VbPath & f_Quote(p_SmsTo) & f_Quote(p_Text) Set o_Shell = CreateObject("WScript.Shell") o_Exec = o_Shell.Run(v_CmdLine, , True) End Function Function f_Quote (p_Str) f_Quote = " " & Chr(34) & p_Str & Chr(34) & " " End Function