Logo faq-o-matic.net
Logo faq-o-matic.net

Windows-Druckwarteschlange mit Nagios überwachen

von veröffentlicht am13. November 2013, 06:19 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Monitoring, VBScript, Windows   Translate with Google Translate Translate EN   Die angezeigte Seite drucken

Dieser Artikel erschien zuerst auf Ollis Blog.

Ein typisches Problem in der Windows Printserver Welt scheinen fehlerhafte (=hängende) Druckeraufträge zu sein. Wenn ein Druckauftrag fehlerhaft ist, blockiert er diesen Drucker, bis dieser Druckauftrag entfernt wurde.

Damit blockierte Drucker nicht durch die BenutzerInnen gemeldet werden müssen (immer unschön und wenig professionell), habe ich einen Check in VBSkript für Nagios/NSclient geschrieben, welcher alle registrierten Drucker mittels WMI auf eben diese Aufträge prüft.

' MSDN: http://msdn.microsoft.com/en-us/library/aa394370%28v=vs.85%29.aspx
' Author: Oliver Skibbe oliskibbe (at) gmail.com
' Date: 2013-10-28
' Required Variables
Const PROGNAME = "check_print_spooler"
Const VERSION = "1.0.0"

Include "C:\Programme\NSClient++\scripts\lib\NagiosPlugins.vbs"

' Arguments
strComputer = WScript.Arguments.Item(0)

return_code = 0
return_msg = "Everythings fine"


Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
' Create the NagiosPlugin object
Set np = New NagiosPlugin

Set Result = objWMIService.ExecQuery("Select * From Win32_PrintJob")

For Each instance In Result
  If InStr(1, "Error", instance.Status, VbTextCompare) > 0 Then
   ' JobId is attached to "caption, description and name" thus we want to split and accessible with printerName(1)
   printerName = Split(instance.Caption,",")   
   failedPrinterStr = failedPrinterStr & " " & Chr(34) & printerName(0) & Chr(34)
   return_code = 2
  End If  
next

If return_code > 0 Then
 return_msg = "Job Errors on printer " & failedPrinterStr
End If

' Nice Exit with msg and exitcode
np.nagios_exit return_msg, return_code


Sub Include( cNameScript )
    Set oFS = CreateObject("Scripting.FileSystemObject")  
    Set oFile = oFS.OpenTextFile( cNameScript )
    ExecuteGlobal oFile.ReadAll()
    oFile.Close
End Sub 

Dieses Skript sollte über einen Windows-Server z.B. über NRPE (mit NSCLIENT++) aufgerufen werden und nimmt als Argument den Computernamen an. Dazu nimmt man folgende Einstellungen im NSClient vor (gilt für Version 0.38):

[NRPE]

;# NRPE PORT NUMBER
;  This is the port the NRPEListener.dll will listen to.
port=5666
;# COMMAND TIMEOUT
;  This specifies the maximum number of seconds that the NRPE daemon will allow plug-ins to finish executing before killing them off.
command_timeout=60
;# COMMAND ARGUMENT PROCESSING
;  This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
allow_arguments=1
[External Scripts]

check_print_spooler=cscript.exe //T:30 //NoLogo scripts\check_print_spooler.vbs $ARG1$

Der aufmerksame Leser wird festgestellt haben, dass dem Spooler ein Argument übergeben werden kann, dieses nimmt den Namen des Servers an, das heißt man kann von einem Server aus viele andere Server angesprochen werden können, dazu muss dann allerdings der NSClient++ Dienst mit einem entsprechenden User gestartet werden, für den rein lokalen Aufruf ("." oder "localhost") reicht das Systemkonto. Im Nagios muss dann folgendes in die commands.cfg eingetragen werden:

Entweder die Verteilung des Service über einen Host oder eine Hostgruppe (Argument wäre der "Hop"-Server):

define command {
  command_name    check_windows_print_spooler
  command_line    $USER1$/check_nrpe -H $ARG1$ -c check_print_spooler -a $HOSTADDRESS$
}

Oder als rein lokale Variante:

define command {
   command_name    check_windows_print_spooler
   command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_print_spooler -a "."
}

Folgende Dinge werde ich wohl noch implementieren:

  • Flag für automatisches Löschen der Jobs
  • E-Mail an Druckjobersteller, dass der Job abgebrochen wurde
  • Umbau auf PHP mit Nutzung von "wmic", d.h. Hop-Server wird überflüssig

Download: https://dl.dropboxusercontent.com/u/9482545/check_print_spooler.vbs

© 2005-2023 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!