home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 May / W2KPRK.iso / netmgmt.cab / prnctrl.vbs < prev    next >
Text File  |  1999-11-04  |  9KB  |  420 lines

  1. '----------------------------------------------------------------------
  2. '
  3. ' Copyright (c) Microsoft Corporation 1998-1999
  4. ' All Rights Reserved
  5. '
  6. ' Abstract:
  7. '
  8. ' prnctrl.vbs - printer control script for Windows 2000
  9. '
  10. ' Usage:
  11. ' prnctrl [-prxt?] [-b printer]
  12. '
  13. ' Examples:
  14. ' prnctrl.vbs -p -b \\server\printer
  15. ' prnctrl.vbs -t -b printer
  16. '----------------------------------------------------------------------
  17.  
  18. option explicit
  19.  
  20. '
  21. ' Debugging trace flags, to enable debug output trace message
  22. ' change gDebugFlag to true.
  23. '
  24. const kDebugTrace = 1
  25. const kDebugError = 2
  26. dim   gDebugFlag
  27.  
  28. gDebugFlag = false
  29.  
  30. '
  31. ' Messages to be displayed if the scripting host is not cscript
  32. '                            
  33. const kMessage1 = "Please run this script using CScript."  
  34. const kMessage2 = "This can be achieved by"
  35. const kMessage3 = "1. Using ""CScript script.vbs arguments"" or" 
  36. const kMessage4 = "2. Changing the default Windows Scripting Host to CScript"
  37. const kMessage5 = "   using ""CScript //H:CScript //S"" and running the script "
  38. const kMessage6 = "   ""script.vbs arguments""."
  39.  
  40. '
  41. ' Operation action values.
  42. '
  43. const kActionUnknown    = 0
  44. const kActionPause      = 1
  45. const kActionResume     = 2
  46. const kActionPurge      = 3
  47. const kActionTestPage   = 4
  48.  
  49. const kErrorSuccess     = 0
  50. const KErrorFailure     = 1
  51.  
  52. main
  53.  
  54. '
  55. ' Main execution starts here
  56. '
  57. sub main
  58.  
  59.     dim iAction
  60.     dim iRetval
  61.     dim strPrinter
  62.     
  63.     '
  64.     ' Abort if the host is not cscript
  65.     '
  66.     if not IsHostCscript() then
  67.    
  68.         call wscript.echo(kMessage1 & vbCRLF & kMessage2 & vbCRLF & _
  69.                           kMessage3 & vbCRLF & kMessage4 & vbCRLF & _
  70.                           kMessage5 & vbCRLF & kMessage6 & vbCRLF)
  71.         
  72.         wscript.quit
  73.    
  74.     end if
  75.  
  76.     iRetval = ParseCommandLine(iAction, strPrinter)
  77.  
  78.     if iRetval = kErrorSuccess then
  79.  
  80.         select case iAction
  81.  
  82.             case kActionPause
  83.                  iRetval = PausePrinter(strPrinter)
  84.  
  85.             case kActionResume
  86.                  iRetval = ResumePrinter(strPrinter)
  87.  
  88.             case kActionPurge
  89.                  iRetval = PurgePrinter(strPrinter)
  90.  
  91.             case kActionTestPage
  92.                  iRetval = PrintTestPage(strPrinter)
  93.  
  94.             case else
  95.                  Usage(true)
  96.                  exit sub
  97.  
  98.         end select
  99.  
  100.     end if
  101.  
  102. end sub
  103.  
  104. '
  105. ' Pause printer
  106. '
  107. function PausePrinter(strPrinter)
  108.  
  109.     on error resume next
  110.  
  111.     DebugPrint kDebugTrace, "In PausePrinter"
  112.  
  113.     dim oMaster
  114.     dim iResult 
  115.  
  116.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  117.  
  118.     oMaster.PrinterPause "", strPrinter
  119.     
  120.     if Err.Number = kErrorSuccess then
  121.  
  122.         wscript.echo "Printer """ & strPrinter & """ was paused"
  123.         
  124.         iResult = kErrorSuccess
  125.  
  126.     else
  127.  
  128.         wscript.echo "Unable to pause printer """ & strPrinter & """, error: 0x" _ 
  129.                      & Hex(Err.Number) & ". " & Err.Description
  130.         
  131.         iResult = kErrorFailure
  132.  
  133.     end if
  134.  
  135.     PausePrinter = iResult
  136.  
  137. end function
  138.  
  139. '
  140. ' Resume printer
  141. '
  142. function ResumePrinter(strPrinter)
  143.  
  144.     on error resume next
  145.  
  146.     DebugPrint kDebugTrace, "In ResumePrinter"
  147.  
  148.     dim oMaster
  149.     dim iResult 
  150.  
  151.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  152.  
  153.     oMaster.PrinterResume "", strPrinter
  154.     
  155.     if Err.Number = kErrorSuccess then
  156.  
  157.         wscript.echo "Printer """ & strPrinter & """ was resumed"
  158.         
  159.         iResult = kErrorSuccess
  160.  
  161.     else
  162.  
  163.         wscript.echo "Unable to resume printer """ & strPrinter & """, error: 0x" _ 
  164.                      & Hex(Err.Number) & ". " & Err.Description
  165.         
  166.         iResult = kErrorFailure
  167.  
  168.     end if
  169.  
  170.     ResumePrinter = iResult
  171.  
  172. end function
  173.  
  174. '
  175. ' Purge printer
  176. '
  177. function PurgePrinter(strPrinter)
  178.  
  179.     on error resume next
  180.  
  181.     DebugPrint kDebugTrace, "In PurgePrinter"
  182.  
  183.     dim oMaster
  184.     dim iResult 
  185.  
  186.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  187.  
  188.     oMaster.PrinterPurge "", strPrinter
  189.     
  190.     if Err.Number = kErrorSuccess then
  191.  
  192.         wscript.echo "Success: printer """ & strPrinter & """ was purged"
  193.         
  194.         iResult = kErrorSuccess
  195.  
  196.     else
  197.  
  198.         wscript.echo "Unable to purge printer """ & strPrinter & """, error: 0x" _ 
  199.                      & Hex(Err.Number) & ". " & Err.Description
  200.         
  201.         iResult = kErrorFailure
  202.  
  203.     end if
  204.  
  205.     PurgePrinter = iResult
  206.  
  207. end function
  208.  
  209. '
  210. ' Print test page
  211. '
  212. function PrintTestPage(strPrinter)
  213.  
  214.     on error resume next
  215.  
  216.     DebugPrint kDebugTrace, "In PrintTestPage"
  217.  
  218.     dim oMaster
  219.     dim iResult 
  220.  
  221.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  222.  
  223.     oMaster.PrintTestPage "", strPrinter
  224.     
  225.     if Err = 0 then
  226.  
  227.         wscript.echo "Test page sent to printer """ & strPrinter & """"
  228.         
  229.         iResult = kErrorSuccess
  230.  
  231.     else
  232.  
  233.         wscript.echo "Unable to send test page to printer """ & strPrinter & _
  234.                      """, error: 0x" & Hex(Err.Number) & ". " & Err.Description
  235.         
  236.         iResult = kErrorFailure
  237.  
  238.     end if
  239.  
  240.     PrintTestPage = iResult
  241.  
  242. end function
  243.  
  244. '
  245. ' Debug display helper function
  246. '
  247. sub DebugPrint(uFlags, strString)
  248.  
  249.     if gDebugFlag = true then
  250.  
  251.         if uFlags = kDebugTrace then
  252.  
  253.             wscript.echo "Debug: " & strString
  254.  
  255.         end if
  256.  
  257.         if uFlags = kDebugError then
  258.  
  259.             if Err <> 0 then
  260.  
  261.                 wscript.echo "Debug: " & strString & " Failed with " & Hex(Err)
  262.  
  263.             end if
  264.  
  265.         end if
  266.  
  267.     end if
  268.  
  269. end sub
  270.  
  271. '
  272. ' Parse the command line into it's components
  273. '
  274. function ParseCommandLine(iAction, strPrinter)
  275.  
  276.     on error resume next
  277.  
  278.     DebugPrint kDebugTrace, "In the ParseCommandLine"
  279.  
  280.     dim oArgs
  281.     dim iIndex
  282.  
  283.     iAction = kActionUnknown
  284.     iIndex = 0
  285.  
  286.     set oArgs = wscript.Arguments
  287.  
  288.     while iIndex < oArgs.Count
  289.  
  290.         select case oArgs(iIndex)
  291.  
  292.             case "-p"
  293.                 iAction = kActionPause
  294.  
  295.             case "-r"
  296.                 iAction = kActionResume
  297.  
  298.             case "-x"
  299.                 iAction = kActionPurge
  300.  
  301.             case "-t"
  302.                 iAction = kActionTestPage
  303.  
  304.             case "-b"
  305.                 iIndex = iIndex + 1
  306.                 strPrinter = oArgs(iIndex)
  307.  
  308.             case "-?"
  309.                 Usage(true)
  310.                 exit function
  311.  
  312.             case else
  313.                 Usage(true)
  314.                 exit function
  315.  
  316.         end select
  317.  
  318.         iIndex = iIndex + 1
  319.  
  320.     wend
  321.  
  322.     if Err.Number = kErrorSuccess then
  323.  
  324.         ParseCommandLine = kErrorSuccess
  325.  
  326.     else
  327.     
  328.         wscript.echo "Unable to parse command line, error 0x" & Hex(Err.Number) _
  329.                      & " " & Err.Description
  330.         
  331.         ParseCommandLine = kErrorFailure
  332.     
  333.     end if
  334.         
  335.     if strPrinter = "" then
  336.  
  337.         wscript.echo "Please specify a printer name"
  338.         
  339.         Usage true
  340.     
  341.     end if
  342.  
  343. end function
  344.  
  345. '
  346. ' Display command usage.
  347. '
  348. sub Usage(bExit)
  349.  
  350.     wscript.echo "Usage: prnctrl [-prxt?] [-b printer]"
  351.     wscript.echo ""
  352.     wscript.echo "Arguments:"
  353.     wscript.echo "-p     - pause the printer"
  354.     wscript.echo "-r     - resume the printer"
  355.     wscript.echo "-x     - purge the printer"
  356.     wscript.echo "-t     - print test page"
  357.     wscript.echo "-?     - display command usage"
  358.     wscript.echo "-b     - printer name"
  359.     wscript.echo ""
  360.     wscript.echo "Examples:"
  361.     wscript.echo "prnctrl.vbs -p -b \\server\printer"
  362.     wscript.echo "prnctrl.vbs -t -b printer"
  363.  
  364.     if bExit <> 0 then
  365.  
  366.         wscript.quit(1)
  367.  
  368.     end if
  369.  
  370. end sub
  371.  
  372. '
  373. ' Determines which program is used to run this script. 
  374. ' Returns true if the script host is cscript.exe
  375. '
  376. function IsHostCscript()
  377.  
  378.     on error resume next
  379.     
  380.     dim strFullName 
  381.     dim strCommand 
  382.     dim i, j 
  383.     dim bReturn
  384.     
  385.     bReturn = false
  386.     
  387.     strFullName = WScript.FullName
  388.     
  389.     i = InStr(1, strFullName, ".exe", 1)
  390.     
  391.     if i <> 0 then
  392.         
  393.         j = InStrRev(strFullName, "\", i, 1)
  394.         
  395.         if j <> 0 then
  396.             
  397.             strCommand = Mid(strFullName, j+1, i-j-1)
  398.             
  399.             if LCase(strCommand) = "cscript" then
  400.             
  401.                 bReturn = true  
  402.             
  403.             end if    
  404.                 
  405.         end if
  406.         
  407.     end if
  408.     
  409.     if Err <> 0 then
  410.     
  411.         call wscript.echo("Error 0x" & hex(Err.Number) & " occurred. " & Err.Description _
  412.                           & ". " & vbCRLF & "The scripting host could not be determined.")       
  413.         
  414.     end if
  415.     
  416.     IsHostCscript = bReturn
  417.  
  418. end function
  419.  
  420.