Skip to content

Instantly share code, notes, and snippets.

@umrysh
Last active August 29, 2015 14:02

Revisions

  1. umrysh revised this gist May 31, 2014. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions check_windows_updates.wsf
    Original file line number Diff line number Diff line change
    @@ -126,6 +126,9 @@ If intImportant + intOptional > 0 Then
    Else
    echoStr = echoStr & "Optional: " & optionalNames
    End If
    If Len(echoStr) > 970 Then
    echoStr = Left(echoStr, 970) & "..."
    End If
    WScript.Echo echoStr

    If intImportant > intCriticLvl Then
  2. umrysh created this gist May 31, 2014.
    148 changes: 148 additions & 0 deletions check_windows_updates.wsf
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,148 @@
    <job>
    <runtime>
    <description>
    Name:
    check_windows_updates (nrpe_nt-plugin) 1.5 based on check_msupdates (nrpe_nt-plugin) 1.0

    License:
    The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute
    copies of the plugins under the terms of the GNU General Public License.
    For more information about these matters, see the file named COPYING.

    Changelog / Contributors:
    2009 May - Albrecht Dress ([email protected])
    2007 June - Micha Jankowski ([email protected])

    </description>
    <named
    name="h"
    helpstring="Help"
    type="simple"
    required="false"
    />
    <named
    name="w"
    helpstring="number of updates before warning status"
    type="string"
    required="false"
    />
    <named
    name="c"
    helpstring="number of updates before critical status "
    type="string"
    required="false"
    />
    </runtime>
    <script language="VBScript">
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Const's and Var's
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Cons for return val's
    Const intOK = 0
    Const intWarning = 1
    Const intCritical = 2
    Const intUnknown = 3

    ' Cons for FSO
    Const ForReading = 1
    Const ForWriting = 2

    Dim updatesNames

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Params
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    If Wscript.Arguments.Named.Exists("h") Then
    Wscript.Echo "Usage: check_windows_updates.wsf /w:1 /c:2"
    Wscript.Echo "/w: - number of updates before warning status "
    Wscript.Echo "/c: - number of updates before critical status "
    End If

    If Wscript.Arguments.Named.Exists("w") Then
    intWarningLvl = Cint(Wscript.Arguments.Named("w"))
    Else
    intWarningLvl = 0
    End If

    If Wscript.Arguments.Named.Exists("c") Then
    intCriticLvl = Cint(Wscript.Arguments.Named("c"))
    Else
    intCriticLvl = 0
    End If

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Main
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Set objAutoUpdate = CreateObject("Microsoft.Update.AutoUpdate")

    intResultDetect = objAutoUpdate.DetectNow
    If intResultDetect = 0 Then
    Else
    WScript.Echo "WARNING: Unable to detect Automatic Updates."
    Wscript.Quit(intUnknown)
    End If

    Set objSession = CreateObject("Microsoft.Update.Session")
    Set objSearcher = objSession.CreateUpdateSearcher


    intImportant = 0
    intOptional = 0

    Set objSysInfo = CreateObject("Microsoft.Update.SystemInfo")
    If objSysInfo.RebootRequired Then
    Wscript.Echo "Reboot required."
    Wscript.Quit(intWarning)
    End If

    Set result = objSearcher.Search("IsInstalled = 0 and IsHidden = 0")
    Set colDownloads = result.Updates

    For Each objEntry in colDownloads
    if objEntry.AutoSelectOnWebSites Then
    if intImportant = 0 Then
    importantNames = objEntry.Title
    else
    importantNames = importantNames & "; " & objEntry.Title
    End If
    intImportant = intImportant + 1
    Else
    If intOptional = 0 Then
    optionalNames = objEntry.Title
    Else
    optionalNames = optionalNames & "; " & objEntry.Title
    End If
    intOptional = intOptional + 1
    End If
    Next

    If intImportant + intOptional > 0 Then
    echoStr = "Updates: " & intImportant & " important, " & intOptional & " optional|"
    If intImportant > 0 Then
    echoStr = echoStr & "Important: " & importantNames
    If intOptional > 0 Then
    echoStr = echoStr & " (note: optional updates not listed)"
    End If
    Else
    echoStr = echoStr & "Optional: " & optionalNames
    End If
    WScript.Echo echoStr

    If intImportant > intCriticLvl Then
    Wscript.Quit(intCritical)
    End If

    If intImportant > intWarningLvl Then
    Wscript.Quit(intWarning)
    End If
    Wscript.Quit(intOK)
    Else
    WScript.Echo "No updates waiting or installing."
    Wscript.Quit(intOK)
    End If

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' End
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    </script>
    </job>