printer.vbs - vbscript script by ActiveXperts Software
printer.vbs checks whether a printer is up and running.
Use printer.vbs directly from ActiveXperts Network Monitor; in the Manager's 'Monitor' menu, select 'New Check (Script)' and select printer.vbs. Configure the required parameter, or press 'Load a working sample'.
In ActiveXperts Network Monitor, Administrators can use three different scripting languages: Powershell, VBScript and SSH.
printer.vbs script code
' ///////////////////////////////////////////////////////////////////////////////
' // ActiveXperts Network Monitor - VBScript based checks
' // For more information about ActiveXperts Network Monitor and VBScript, visit
' // http://www.activexperts.com/support/network-monitor/online/vbscript/
' ///////////////////////////////////////////////////////////////////////////////
Option Explicit
' Declaration of global variables
Dim SYSDATA, SYSEXPLANATION ' SYSDATA is displayed in the 'Data' column in the Manager; SYSEXPLANATION in the 'LastResponse' column
' Constants - return values
Const retvalUnknown = 1 ' ActiveXperts Network Monitor functions should always return True (-1, Success), False (0, Error) or retvalUnknown (1, Uncertain)
' // To test a function outside Network Monitor (e.g. using CSCRIPT from the
' // command line), remove the comment character (') in the following lines:
' Dim bResult
' bResult = CheckPrinter( "localhost", "", "HP LaserJet 2300 Series PS" )
' WScript.Echo "Return value: [" & bResult & "]"
' WScript.Echo "SYSDATA: [" & SYSDATA & "]"
' WScript.Echo "SYSEXPLANATION: [" & SYSEXPLANATION & "]"
' //////////////////////////////////////////////////////////////////////////////
Const PrinterIdle = 3
Const PrinterPrinting = 4
Const PrinterWarmingUp = 5
Function CheckPrinter( strHost, strAltCredentials, strPrinter )
' Description:
' This function checks if the printer, indicated by strPrinter, is up and running on
' the machine specified by strHost.
' Parameters:
' 1) strHost As String - Hostname or IP address of the computer you want to check
' 2) strAltCredentials As String - Specify an empty string to use Network Monitor service credentials.
' To use alternate credentials, enter a server that is defined in Server Credentials table.
' (To define Server Credentials, choose Tools->Options->Server Credentials)
' 3) strPrinter As String - Name of the printer
' Usage:
' CheckPrinter( "<Hostname | IP>", "<Empty String | Server>", "<Printername>" )
' Sample:
' CheckPrinter( "localhost", "", "HP LaserJet 2300 Series PS" )
Dim strAltLogin, strAltPassword, objWMIService
CheckPrinter = retvalUnknown ' Default return value
SYSDATA = "" ' SysData will store the printer status after completion
SYSEXPLANATION = "" ' Set initial value
strAltLogin = ""
strAltPassword = ""
' If alternate credentials are specified, retrieve the alternate login and password from the ActiveXperts global settings
If( strAltCredentials <> "" ) Then
If( Not getCredentials( strHost, strAltCredentials, strAltLogin, strAltPassword, SYSEXPLANATION )) Then
Exit Function
End If
End If
' WMI Connect
If( Not wmiConnect( strHost, strAltLogin, strAltPassword, objWMIService, SYSEXPLANATION ) ) Then
Exit Function
End If
CheckPrinter = checkPrinterWMI( objWMIService, strHost, strPrinter, SYSDATA, SYSEXPLANATION )
End Function
' //////////////////////////////////////////////////////////////////////////////
' // --- Private Functions section ---
' // Private functions names should start with a lower case character, so they
' // will not be listed in the Network Monitor's function browser.
' //////////////////////////////////////////////////////////////////////////////
Function checkPrinterWMI( objWMIService, strHost, strPrinter, BYREF strSysData, BYREF strSysExplanation )
Dim objPrinter, collPrinters
checkPrinterWMI = retvalUnknown ' Default return value
On Error Resume Next
set collPrinters = objWMIService.ExecQuery( "select * from Win32_Printer" )
If( Err.Number <> 0 ) Then
strSysData = ""
strSysExplanation = "Unable to query WMI class on computer [" & strHost & "]"
Exit Function
End If
If( collPrinters.Count <= 0 ) Then
strSysData = ""
strSysExplanation = "Win32_Printer class does not exist on computer [" & strHost & "]"
Exit Function
End If
On Error Goto 0
If( collPrinters.Count = 0 ) Then
checkPrinterWMI = retvalUnknown
strSysData = ""
strSysExplanation = "No printers found on print server"
Exit Function
End If
For each objPrinter in collPrinters
If( Err.Number <> 0 ) Then
checkPrinterWMI = retvalUnknown
strSysData = ""
strSysExplanation = "No printers found on print server"
Exit Function
End If
If UCase( objPrinter.Name ) = UCase( strPrinter ) Then
If objPrinter.PrinterStatus = PrinterIdle Or objPrinter.PrinterStatus = PrinterPrinting Or objPrinter.PrinterStatus = PrinterWarmingUp Then
checkPrinterWMI = True
strSysData = objPrinter.PrinterStatus & "," & getPrinterStatusInfo( objPrinter.PrinterStatus )
strSysExplanation = "Printer is up (" & getPrinterStatusInfo( objPrinter.PrinterStatus ) & ")"
Exit Function
End If
checkPrinterWMI = False
strSysData = objPrinter.PrinterStatus & "," & getPrinterStatusInfo( objPrinter.PrinterStatus )
strSysExplanation = "Printer is down (" & getPrinterStatusInfo( objPrinter.PrinterStatus ) & ")"
Exit Function
End If
Next
checkPrinterWMI = False
strSysExplanation = "Printer [" & strPrinter &"] not found on print server [" & strHost & "]"
End Function
' //////////////////////////////////////////////////////////////////////////////
Function getPrinterStatusInfo( numStatus )
Dim strStatusInfo
getPrinterStatusInfo = ""
Select Case numStatus
Case 1
strStatusInfo = "Other"
Case 2
strStatusInfo = "Unknown"
Case 3
strStatusInfo = "Running/Full Power"
Case 4
strStatusInfo = "Warning"
Case 5
strStatusInfo = "In Test"
Case 6
strStatusInfo = "Not Applicable"
Case 7
strStatusInfo = "Power Off"
Case 8
strStatusInfo = "Off Line"
Case 9
strStatusInfo = "Off Duty"
Case 10
strStatusInfo = "Degraded"
Case 11
strStatusInfo = "Not Installed"
Case 12
strStatusInfo = "Install Error"
Case 13
strStatusInfo = "Power Save - Unknown"
Case 14
strStatusInfo = "Power Save - Low Power Mode"
Case 15
strStatusInfo = "Power Save - Standby"
Case 16
strStatusInfo = "Power Cycle"
Case 17
strStatusInfo = "Power Save - Warning"
Case Else
strStatusInfo = "Unkown"
End Select
getPrinterStatusInfo = strStatusInfo
End Function
' //////////////////////////////////////////////////////////////////////////////
Function getCredentials( strHost, strAltCredentials, BYREF strAltLogin, BYREF strAltPassword, BYREF strSysExplanation )
Dim objNMServerCredentials
strAltLogin = ""
strAltPassword = ""
strSysExplanation = ""
getCredentials = False
If( strAltCredentials = "" ) Then
' No alternate credentials specified, so login and password are empty and service credentials will be used
getCredentials = True
Exit Function
End If
Set objNMServerCredentials = CreateObject( "ActiveXperts.NMServerCredentials" )
strAltLogin = objNMServerCredentials.GetLogin( strAltCredentials )
strAltPassword = objNMServerCredentials.GetPassword( strAltCredentials )
If( strAltLogin = "" ) Then
getCredentials = False
strSysExplanation = "No alternate credentials defined for [" & strAltCredentials & "]. In the Manager application, select 'Options' from the 'Tools' menu and select the 'Server Credentials' tab to enter alternate credentials"
Exit Function
End If
getCredentials = True
End Function
' //////////////////////////////////////////////////////////////////////////////
Function wmiConnect( strHost, strAltLogin, strAltPassword, BYREF objWMIService, BYREF strSysExplanation )
Dim objSWbemLocator, colItems
Dim bConnectResult
wmiConnect = False
Set objWMIService = Nothing
If( strAltLogin = "" ) Then
' Connect to remote host on same domain using same security context
On Error Resume Next
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=Impersonate}!\\" & strHost &"\root\cimv2" )
If( Err.Number <> 0 ) Then
bConnectResult = False
Else
bConnectResult = True
End If
On Error Goto 0
Else
' Connect to remote host using different security context and/or different domain
On Error Resume Next
Set objSWbemLocator = CreateObject( "WbemScripting.SWbemLocator" )
Set objWMIService = objSWbemLocator.ConnectServer( strHost, "root\cimv2", strAltLogin, strAltPassword )
If( Err.Number <> 0 ) Then
bConnectResult = False
Else
bConnectResult = True
End If
objWMIService.Security_.ImpersonationLevel = 3
On Error Goto 0
End If
If( Not bConnectResult ) Then
Set objWMIService = Nothing
wmiConnect = False
strSysExplanation = "Unable to connect to [" & strHost & "]. Possible reasons: no WMI installed on the remote server, firewall blocking WMI calls, login failure, or remote server down"
Exit Function
End If
wmiConnect = True
End Function
