Windows update check monitor added to the Shire

Storer, Raymond storerr at nibco.com
Sat Jun 27 00:32:58 CEST 2009


Well, I found an error... (grin). I needed to check for a recordset with no records in it-no Windows updates needed!
Sorry for the inconvenience. Here's the updated code...

Ray

'Change these to match your environment
Const AlarmRedLevel = 10
Const AlarmYellowLevel = 5
Const AlarmRed = "green"
Const AlarmYellow = "green"
Const AlarmGreen = "green"
Const adVarChar = 200
Const adInteger = 3
Const MaxCharacters = 255
Const adFldIsNullable = 32


Dim oSearcher, oResults, oUpdates, oShell, oRS
Set oSearcher = CreateObject("Microsoft.Update.Searcher")
Set oResults = oSearcher.Search("Type='Software'")
Set oUpdates = oResults.Updates
Set oShell = WScript.CreateObject("WScript.Shell")
Set oRS = CreateObject("ADOR.Recordset")

oRS.Fields.Append "title", adVarChar, MaxCharacters
oRS.Fields.Append "severity", adVarChar, MaxCharacters, adFldIsNullable
oRS.Fields.Append "description", adVarChar, MaxCharacters + MaxCharacters
oRS.Fields.Append "size", adInteger
oRS.Fields.Append "deadline", adVarChar, MaxCharacters, adFldIsNullable
oRS.Fields.Append "url", adVarChar, MaxCharacters
oRS.Fields.Append "kbs", adVarChar, MaxCharacters

Dim strOut, IsInstalled, strKBs, strURL, IsEven, iUpdates, iUpdatesNeeded, strClass, strAlarm, strSvrName, strSeverity
iUpdates = oUpdates.Count
strSvrName = LCase(oShell.ExpandEnvironmentStrings("%COMPUTERNAME%"))

iUpdatesNeeded = 0
oRS.Open
For i = 0 to iUpdates - 1
                IsInstalled = oUpdates.Item(i).IsInstalled
                If (IsInstalled = False) Then
                                strKBs = ""
                                iUpdatesNeeded = iUpdatesNeeded + 1
                                oRS.AddNew
                                oRS("title") = oUpdates.Item(i).Title
                                strSeverity = oUpdates.Item(i).MsrcSeverity
                                If (IsNull(strSeverity) = True) Then
                                                strSeverity = "9 - none"
                                Else
                                                If (IsEmpty(strSeverity) = True) Then
                                                                strSeverity = "9 - none"
                                                Else
                                                                Select Case UCase(strSeverity)
                                                                                Case "CRITICAL"
                                                                                                strSeverity = "1-Critical"
                                                                                Case "IMPORTANT"
                                                                                                strSeverity = "2-Important"
                                                                                Case "MODERATE"
                                                                                                strSeverity = "3-Moderate"
                                                                                Case "LOW"
                                                                                                strSeverity = "4-Low"
                                                                                Case Else
                                                                                                strSeverity = "9-" & strSeverity
                                                                End Select
                                                End If 'severity empty
                                End If 'severity null
                                oRS("severity") = strSeverity
                                oRS("description") = oUpdates.Item(i).Description
                                oRS("size") = oUpdates.Item(i).MaxDownloadSize
                                oRS("deadline") = oUpdates.Item(i).Deadline
                                oRS("url") = oUpdates.Item(i).SupportURL
                                For Each strArticle in oUpdates.Item(i).KBArticleIDs
                                                If (Len(strKBs) > 0) Then
                                                                strKBs = strKBs & ", " & strArticle
                                                Else
                                                                strKBs = strArticle
                                                End If
                                Next 'each kb
                                oRS("kbs") = strKBs
                                oRS.Update
                End If
Next

If (iUpdatesNeeded > AlarmRedLevel) Then
                strAlarm = AlarmRed & " " & Date & " " & LCase(Time) & " " & strSvrName & VbCrLf
Else
                If (iUpdatesNeeded > AlarmYellowLevel) Then
                                strAlarm = AlarmYellow & " " & Date & " " & LCase(Time) & " " & strSvrName & VbCrLf
                Else
                                strAlarm = AlarmGreen & " " & Date & " " & LCase(Time) & " " & strSvrName & VbCrLf
                End If
End If

WScript.Echo strAlarm & VbCrLf

If (iUpdatesNeeded > 0) Then
                oRS.Sort = "severity ASC, title ASC"
                oRS.MoveFirst

                strOut = "<style type=""text/css"">" & VbCrLf & _
                                "table.updates { width: 994; border-width: 3px; border-spacing: 0px; border-style: solid; border-color: black; border-collapse: separate; background-color: white; color: black; }" & VbCrLf & _
                                "table.updates th { background-color: white; }" & VbCrLf & _
                                "table.updates td.even { border-width: 1px; padding: 3px; border-style: solid; border-color: gray; background-color: #FCF6CF; color: black; }" & VbCrLf & _
                                "table.updates td.odd { border-width: 1px; padding: 3px; border-style: solid; border-color: gray; background-color: #FEFEF2; color: black; }" & VbCrLf & _
                                "A:link { text-decoration: none; color: blue; }" & VbCrLf & _
                                "A:visited { text-decoration: none; color: purple; }" & VbCrLf & _
                                "A:hover { text-decoration: underline; font-weight: bold; color: red; }" & VbCrLf & _
                                "</style>" & VbCrLf & _
                                "<h2>" & UCase(strSvrName) & " Needs [" & CStr(iUpdatesNeeded) & "] Windows Updates</h2>" & VbCrLf & _
                                "<table class='updates'>" & _
                                "<th>Title</th>" & _
                                "<th>Severity</th>" & _
                                "<th>Description</th>" & _
                                "<th>Size(bytes)</th>" & _
                                "<th>Deadline</th>" & _
                                "<th>URL</th>" & _
                                "<th>KBs</th>" & _
                                "</tr>" & VbCrLf
                                IsEven = True
                Do Until oRS.EOF
                                strKBs = ""
                                strURL = oRS.Fields.Item("url")
                                If (IsEven = True) Then
                                                strClass = "class='even'"
                                                IsEven = False
                                Else
                                                strClass = "class='odd'"
                                                IsEven = True
                                End If
                                strOut = strOut + "<tr><td style='width: 25%' " & strClass & ">" & oRS.Fields.Item("title") & "</td>" & _
                                                "<td style='width: 5%' " & strClass & "> " & oRS.Fields.Item("severity") & "</td>" & _
                                                "<td style='width: 45%' " & strClass & ">" & oRS.Fields.Item("description") & "</td>" & _
                                                "<td style='width: 5%' " & strClass & ">" & CStr(oRS.Fields.Item("size")) & "</td>" & _
                                                "<td style='width: 5%' " & strClass & "> " & oRS.Fields.Item("deadline") & "</td>" & _
                                                "<td style='width: 10%' " & strClass & "><A href='" & strURL & "' target='_blank'>" & strURL & "</a></td>" & _
                                                "<td style='width: 5%' " & strClass & ">" & oRS.Fields.Item("kbs") & "</td>"
                                strOut = strOut & "</tr>" & VbCrLf
                                oRS.MoveNext
                Loop 'each record

                strOut = strOut & "</table>" & VbCrLf
Else
                strOut = "<div style='font-style: bold; color: yellow;'>No updates required</div>"
End If 'iUpdatesNeeded > 0

WScript.Echo strOut

'Release our resources
oRS.Close
Set oShell = Nothing
Set oUpdates = Nothing
Set oResults = Nothing
Set oSearcher = Nothing

________________________________
CONFIDENTIALITY NOTICE: This email and any attachments are for the
exclusive and confidential use of the intended recipient. If you are not
the intended recipient, please do not read, distribute or take action in
reliance upon this message. If you have received this in error, please
notify us immediately by return email and promptly delete this message
and its attachments from your computer system. We do not waive
attorney-client or work product privilege by the transmission of this
message.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xymon.com/pipermail/xymon/attachments/20090626/8c5e3590/attachment.html>


More information about the Xymon mailing list