Windows update check monitor added to the Shire

Storer, Raymond storerr at nibco.com
Fri Jun 26 22:38:27 CEST 2009


This is *not* fully regression tested (it works for me); but, here is the code using a disconnected record set for sorting. Also, IE8 does not format the table the same way Firefox 3 does, and I gave up trying to make it do it. So, you will likely want to adjust the styles to fit your needs.

Ray

'Change these to match your environment
Const AlarmRedLevel = 10
Const AlarmYellowLevel = 5
Const AlarmRed = "red"
Const AlarmYellow = "yellow"
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
'I do not know how large the actual description field is; it will bomb during updates if the description is not large enough
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
oRS.Sort = "severity ASC, title ASC"
oRS.MoveFirst

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

strOut = "<style type=""text/css"">" & VbCrLf & _
                "table.updates { width: 990; 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

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/888032ca/attachment.html>


More information about the Xymon mailing list