monitors:printer_monitoring

no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


monitors:printer_monitoring [2009/11/23 06:07] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +====== Printer Monitoring ======
 +
 +^ Author | [[ mikefisher2k@gmail.com | Michael Fisher ]] |
 +^ Compatibility | Xymon 4.2+ |
 +^ Requirements | Windows Print Services |
 +^ Download | Printer.vbs |
 +^ Last Update | 2009-04-09 |
 +
 +===== Description =====
 +Script to Monitor and Report on Status of Windows Print Services
 +===== Installation =====
 +Run the VBS Script at any desired Interval
 +=== Client side ===
 +Place the VBS into the EXT folder and configure BBWin.cfg to load the external at any given interval
 +=== Server side ===
 +N/A
 +===== Source =====
 +
 +==== Printer.vbs ====
 +<hidden onHidden="Show Code ⇲" onVisible="Hide Code ⇱">
 +<code>
 +Option Explicit
 +On Error Resume Next
 +
 +Dim colour, bbdelay, strDetail, strDetailAll
 +Dim WindowsShell, objWMIService, colInstalledPrinters, BBConfigExtPath, objPrinter
 +
 +Const BBTestName = "print"
 +
 +strDetail = ""
 +strDetailAll = ""
 +colour = "green"
 +bbdelay = "+27"
 +
 +BBConfigExtPath = "c:\Program Files\BBWin\tmp"
 +
 +'=============================================================================
 +
 +
 +Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
 +Set colInstalledPrinters = objWMIService.ExecQuery("Select PortName,Location,Status,DetectedErrorState,Name from Win32_Printer where Name != 'Microsoft XPS Document Writer'")
 +
 +For Each objPrinter in colInstalledPrinters
 +
 +If objPrinter.DetectedErrorState = "9" Then
 +strDetail = "&red" & " " & objPrinter.Name & " is OFFLINE" & vbCrLf & strDetail & vbCrLf
 +strDetailAll = "<tr><td>&red " & objPrinter.Name & "</td><td>" & objPrinter.PortName & "</td><td>" & objPrinter.Location & "</td></tr>" & vbCrLf & strDetailAll
 +colour = "red"
 +ElseIf objPrinter.DetectedErrorState = "6" Then
 +strDetail = "&red" & " " & objPrinter.Name & " has NO TONER" & vbCrLf & strDetail & vbCrLf
 +strDetailAll = "<tr><td>&red " & objPrinter.Name & "</td><td>" & objPrinter.PortName & "</td><td>" & objPrinter.Location & "</td></tr>" & vbCrLf & strDetailAll
 +colour = "red"
 +ElseIf objPrinter.DetectedErrorState = "1" Then
 +strDetail = "&red" & " " & objPrinter.Name & " is in ERROR" & vbCrLf & strDetail & vbCrLf
 +strDetailAll = "<tr><td>&red " & objPrinter.Name & "</td><td>" & objPrinter.PortName & "</td><td>" & objPrinter.Location & "</td></tr>" & vbCrLf & strDetailAll
 +colour = "red"
 +ElseIf objPrinter.DetectedErrorState = "4" Then
 +strDetail = "&red" & " " & objPrinter.Name & " has NO PAPER" & vbCrLf & strDetail & vbCrLf
 +strDetailAll = "<tr><td>&red " & objPrinter.Name & "</td><td>" & objPrinter.PortName & "</td><td>" & objPrinter.Location & "</td></tr>" & vbCrLf & strDetailAll
 +colour = "red"
 +ElseIf objPrinter.DetectedErrorState = "8" Then
 +strDetail = "&red" & " " & objPrinter.Name & " is JAMMED" & vbCrLf & strDetail & vbCrLf
 +strDetailAll = "<tr><td>&red " & objPrinter.Name & "</td><td>" & objPrinter.PortName & "</td><td>" & objPrinter.Location & "</td></tr>" & vbCrLf & strDetailAll
 +colour = "red"
 +ElseIf objPrinter.DetectedErrorState = "10" Then
 +strDetail = "&red" & " " & objPrinter.Name & " is Requesting Service" & vbCrLf & strDetail & vbCrLf
 +strDetailAll = "<tr><td>&red " & objPrinter.Name & "</td><td>" & objPrinter.PortName & "</td><td>" & objPrinter.Location & "</td></tr>" & vbCrLf & strDetailAll
 +colour = "red"
 +ElseIf objPrinter.DetectedErrorState = "11" Then
 +strDetail = "&red" & " " & objPrinter.Name & " shows OUTPUT BIN IS FULL" & vbCrLf & strDetail & vbCrLf
 +strDetailAll = "<tr><td>&red " & objPrinter.Name & "</td><td>" & objPrinter.PortName & "</td><td>" & objPrinter.Location & "</td></tr>" & vbCrLf & strDetailAll
 +colour = "red"
 +ElseIf objPrinter.DetectedErrorState = "0" Then
 +strDetailAll = "<tr><td>&green " & objPrinter.Name & "</td><td>" & objPrinter.PortName & "</td><td>" & objPrinter.Location & "</td></tr>" & vbCrLf & strDetailAll
 +End If
 +
 +Next
 +
 +
 +Set colInstalledPrinters = Nothing
 +Set objWMIService = Nothing
 +
 +StartDetailBuild()
 +SetPrintFinalStatus()
 +GetBBPath()
 +WriteFile()
 +
 +Sub StartDetailBuild()
 + IF colour = "red" then 
 + strDetail = "&red Printer Status:" & vbCrLf & vbCrLf & strDetail & vbCrLf
 +        ElseIf colour = "green" then
 +        strDetail = "&green Printer Status: All Printers are Online and Operational" & vbCrLf & vbCrLf & strDetail & vbCrLf
 +        End If
 +End Sub
 +
 +Sub SetPrintFinalStatus()
 + Select Case colour
 + Case "red"
 + strDetail = "red" & bbdelay & " " & Date & " " & Time & vbCrLf & vbCrLf & strDetail & vbCrLf
 + Case "yellow"
 + strDetail = "yellow" & bbdelay & " " & Date & " " & Time & vbCrLf & vbCrLf & strDetail & vbCrLf
 + Case "green"
 + strDetail = "green" & bbdelay & " " & Date & " " & Time & vbCrLf & vbCrLf & strDetail & vbCrLf
 + End Select
 +End Sub
 +
 +Sub GetBBPath()
 + Set WindowsShell = WScript.CreateObject("WScript.Shell")
 + If IsObject(WindowsShell) Then Set WindowsShell = Nothing
 +End Sub
 +
 +Sub WriteFile()
 +    Dim oFSO, oFile
 +    Set oFSO = CreateObject("Scripting.FileSystemObject")
 +    Set oFile = oFSO.OpenTextFile(BBConfigExtPath & "\" & BBTestName , 8 , TRUE)
 +    oFile.Write strDetail
 +    oFile.Write "<table>" & vbCrLf & strDetailAll & vbCrLf & "</table>"
 +    oFile.Close
 +    If IsObject(oFSO) Then Set oFSO = Nothing
 +End Sub
 +</code>
 +</hidden>
 +
 +===== Known  Bugs and Issues =====
 +None
 +===== To Do =====
 +Provided by ""Malcolm Hunter" <malcolm.hunter@gmx.co.uk>"
 +
 +To create the output so that email alerts do not contain HTML code, incorporate the following into the above script:
 +
 +<code>
 +' Get max lengths
 +For Each objPrinter in colInstalledPrinters
 +If Len(objPrinter.Name) > iMaxNameLen Then iMaxNameLen = Len(objPrinter.Name)
 +If Len(objPrinter.PortName) > iMaxPortLen Then iMaxPortLen = Len(objPrinter.PortName)
 +If Len(objPrinter.Location) > iMaxLocnLen Then iMaxLocnLen = Len(objPrinter.Location)
 +Next
 +
 +' Use tabs and padding to format each line
 +strDetailAll = "&red " & Pad(objPrinter.Name, iMaxNameLen) & vbTab & Pad(objPrinter.PortName, iMaxPortLen) & vbTab & Pad(objPrinter.Location, iMaxLocnLen)
 +
 +' Returns text padded to iLength
 +Function Pad(sText, iLength)
 +Dim iPadBy, sTemp
 +sTemp = sText
 +iPadding = iLength - Len(sText)
 +If iPadding > 0 Then sTemp = sTemp & Space(iPadding)
 +Pad = sTemp
 +End Function
 +</code>
 +
 +===== Credits =====
 +
 +===== Changelog =====
 +
 +  * **2009-04-09**
 +    * Initial release
  
  • monitors/printer_monitoring.txt
  • Last modified: 2009/11/23 06:07
  • by 127.0.0.1