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

  1. '----------------------------------------------------------------------
  2. '
  3. ' Copyright (c) Microsoft Corporation 1998-1999
  4. ' All Rights Reserved
  5. '
  6. ' Abstract:
  7. '
  8. ' persist.vbs - script for saving and restoring printer configuration
  9. '
  10. ' Usage:
  11. ' persist [-rs?] [-b printer-name][-f file-name]
  12. ' Examples:
  13. ' persist.vbs -s -b \\server\printer -f file.txt -all
  14. ' persist.vbs -r -b printer -f file.txt -sec
  15. '
  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 kActionSave       = 1
  45. const kActionRestore    = 2
  46.  
  47. const kErrorSuccess     = 0
  48. const KErrorFailure     = 1
  49.  
  50. const kPrinterData      = 1
  51. const kPrinterInfo2     = 2
  52. const kPrinterInfo7     = 4
  53. const kPrinterSec       = 8
  54. const kUserDevmode      = 16
  55. const kPrinterDevmode   = 32
  56. const kColorProf        = 64
  57. const kForceName        = 128
  58. const kResolveName      = 256
  59. const kResolvePort      = 512
  60. const kResolveShare     = 1024
  61. const kDontGenerateShare= 2048
  62.  
  63. '
  64. ' kPrinterData + kPrinterInfo2 + kPrinterDevmode
  65. '
  66. const kMinimumSettings  = 35  
  67.  
  68. '
  69. ' kMinimumSettings + kPrinterInfo7 + kPrinterSec + 
  70. ' kUserDevmode + kColorProf
  71. '
  72. const kAllSettings      = 127 
  73.  
  74. main
  75.  
  76. '
  77. ' Main execution starts here
  78. '
  79. sub main
  80.  
  81.     dim iAction
  82.     dim iRetval
  83.     dim strPrinter
  84.     dim strFile 
  85.     dim iFlags
  86.     
  87.     '
  88.     ' Abort if the host is not cscript
  89.     '
  90.     if not IsHostCscript() then
  91.    
  92.         call wscript.echo(kMessage1 & vbCRLF & kMessage2 & vbCRLF & _
  93.                           kMessage3 & vbCRLF & kMessage4 & vbCRLF & _
  94.                           kMessage5 & vbCRLF & kMessage6 & vbCRLF)
  95.         
  96.         wscript.quit
  97.    
  98.     end if
  99.                
  100.     iRetval = ParseCommandLine(iAction, strPrinter, strFile, iFlags)
  101.  
  102.     if iRetval = kErrorSuccess then
  103.  
  104.         select case iAction
  105.  
  106.             case kActionSave
  107.                  iRetval = SavePrinter(strPrinter, strFile, iFlags)
  108.  
  109.             case kActionRestore
  110.                  iRetval = RestorePrinter(strPrinter, strFile, iFlags)
  111.  
  112.             case else
  113.                  Usage(True)
  114.                  exit sub
  115.  
  116.         end select
  117.  
  118.     end if
  119.  
  120. end sub
  121.  
  122. '
  123. ' Save printer configuration
  124. '
  125. function SavePrinter(strPrinter, strFile, iFlags)
  126.  
  127.     on error resume next
  128.     
  129.     DebugPrint kDebugTrace, "In SavePrinter"
  130.  
  131.     dim oMaster
  132.  
  133.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  134.     
  135.     oMaster.PrinterPersistSave strPrinter, strFile, iFlags
  136.  
  137.     if Err.Number = kErrorSuccess then
  138.  
  139.         wscript.echo "Success saving the configuration of the printer """ & strPrinter & """ "
  140.         
  141.         SavePrinter = kErrorSuccess
  142.         
  143.     else
  144.     
  145.         wscript.echo "Unable to save the configuration of the printer """ & strPrinter _
  146.                      & """, error 0x" & Hex(Err.Number) & ". " & Err.Description
  147.     
  148.         SavePrinter = kErrorFailure    
  149.  
  150.     end if
  151.  
  152. end function
  153.  
  154. '
  155. ' Restore printer configuration
  156. '
  157. function RestorePrinter(strPrinter, strFile, iFlags)
  158.  
  159.     on error resume next    
  160.  
  161.     DebugPrint kDebugTrace, "In RestorePrinter"
  162.  
  163.     dim oMaster
  164.  
  165.     Set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  166.     
  167.     oMaster.PrinterPersistRestore strPrinter, strFile, iFlags
  168.  
  169.     if Err.Number = kErrorSuccess then
  170.     
  171.         wscript.echo "Success restoring the configuration of the printer """ & strPrinter & """ "
  172.     
  173.         RestorePrinter = kErrorSuccess
  174.         
  175.     else
  176.     
  177.         wscript.echo "Unable to restore the configuration of the printer """ & strPrinter _
  178.                      & """, error: 0x" & Hex(Err.Number) & ". " & Err.Description
  179.     
  180.         RestorePrinter = kErrorFailure    
  181.  
  182.     end if
  183.  
  184. end function
  185.  
  186. '
  187. ' Debug display helper function
  188. '
  189. sub DebugPrint(uFlags, strString)
  190.  
  191.     if gDebugFlag = true then
  192.  
  193.         if uFlags = kDebugTrace then
  194.  
  195.             wscript.echo "Debug: " & strString
  196.  
  197.         end if
  198.  
  199.         if uFlags = kDebugError then
  200.  
  201.             if Err <> 0 then
  202.  
  203.                 wscript.echo "Debug: " & strString & " Failed with " & Hex(Err)
  204.  
  205.             end if
  206.  
  207.         end if
  208.  
  209.     end if
  210.  
  211. end sub
  212.  
  213. '
  214. ' Parse the command line into it's components
  215. '
  216. function ParseCommandLine(iAction, strPrinter, strFile, iFlags)
  217.  
  218.     DebugPrint kDebugTrace, "In the ParseCommandLine"
  219.  
  220.     dim oArgs
  221.     dim iIndex
  222.     
  223.     iFlags = 0
  224.  
  225.     iAction = kActionUnknown
  226.     iIndex  = 0
  227.  
  228.     set oArgs = wscript.Arguments
  229.  
  230.     while iIndex < oArgs.Count
  231.  
  232.         select case oArgs(iIndex)
  233.  
  234.             case "-r"
  235.                 iAction = kActionRestore
  236.  
  237.             case "-s"
  238.                 iAction = kActionSave
  239.  
  240.             case "-b"
  241.                 iIndex = iIndex + 1
  242.                 strPrinter = oArgs(iIndex)
  243.  
  244.             case "-f"
  245.                 iIndex = iIndex + 1
  246.                 strFile = oArgs(iIndex)
  247.             
  248.             case "-data"
  249.                 iFlags = iFlags + kPrinterData
  250.  
  251.             case "-2"
  252.                 iFlags = iFlags + kPrinterInfo2
  253.                 
  254.             case "-7"
  255.                 iFlags = iFlags + kPrinterInfo7
  256.  
  257.             case "-sec"
  258.                 iFlags = iFlags + kPrinterSec
  259.  
  260.             case "-udev"
  261.                 iFlags = iFlags + kUserDevmode
  262.                 
  263.             case "-pdev"
  264.                 iFlags = iFlags + kPrinterDevmode    
  265.  
  266.             case "-color"
  267.                 iFlags = iFlags + kColorProf
  268.  
  269.             case "-force"
  270.                 iFlags = iFlags + kForceName
  271.  
  272.             case "-resname"
  273.                 iFlags = iFlags + kResolveName
  274.  
  275.             case "-resport"
  276.                 iFlags = iFlags + kResolvePort
  277.  
  278.             case "-resshare"
  279.                 iFlags = iFlags + kResolveShare
  280.  
  281.             case "-noshare"
  282.                 iFlags = iFlags + kDontGenerateShare
  283.  
  284.             case "-min"
  285.                 iFlags = iFlags + kMinimumSettings
  286.  
  287.             case "-all"
  288.                 iFlags = iFlags + kAllSettings
  289.              
  290.             case "-?"
  291.                 Usage(true)
  292.                 exit function
  293.  
  294.             case else
  295.                 Usage(true)
  296.                 exit function
  297.  
  298.         end select
  299.  
  300.         iIndex = iIndex + 1
  301.  
  302.     wend
  303.     
  304.     if Err.Number = kErrorSuccess then
  305.  
  306.         ParseCommandLine = kErrorSuccess
  307.  
  308.     else
  309.  
  310.         wscript.echo "Unable to parse command line, error 0x" & _
  311.                      Hex(Err.Number) & ". " & Err.Description
  312.         
  313.         ParseCommandLine = KErrorFailure
  314.         
  315.     end if
  316.  
  317. end function
  318.  
  319. '
  320. ' Display command usage.
  321. '
  322. sub Usage(bExit)
  323.  
  324.     wscript.echo "Usage: persist [-rs?] [-b printer-name][-f file-name][-data]"
  325.     wscript.echo "               [-2][-7][-sec][-udev][-pdev][-color][-force]"
  326.     wscript.echo "               [-resname][-resport][-resshare][-noshare][-min][-all]" 
  327.     wscript.echo ""
  328.     wscript.echo "Arguments:"
  329.     wscript.echo "-r        - restore printer configuration"
  330.     wscript.echo "-s        - save printer configuration"
  331.     wscript.echo "-?        - display command usage"
  332.     wscript.echo "-b        - printer name"
  333.     wscript.echo "-data     - printer data"
  334.     wscript.echo "-2        - Printer Info 2"
  335.     wscript.echo "-7        - Printer Info 7"
  336.     wscript.echo "-sec      - security"
  337.     wscript.echo "-color    - color profile"
  338.     wscript.echo "-force    - force name"
  339.     wscript.echo "-udev     - user devmode"
  340.     wscript.echo "-pdev     - printer devmode"
  341.     wscript.echo "-resname  - resolve name"
  342.     wscript.echo "-resport  - resolve port"
  343.     wscript.echo "-resshare - resolve share"
  344.     wscript.echo "-noshare  - don't share the printer"
  345.     wscript.echo "-min      - minimum settings"
  346.     wscript.echo "-all      - all settings"
  347.     wscript.echo ""
  348.     wscript.echo "Examples:"
  349.     wscript.echo "persist.vbs -s -b \\server\printer -f file.txt -all"
  350.     wscript.echo "persist.vbs -r -b printer -f file.txt -sec"
  351.     
  352.     if bExit then
  353.  
  354.         wscript.quit(1)
  355.  
  356.     end if
  357.  
  358. end sub
  359.  
  360. '
  361. ' Determines which program is used to run this script. 
  362. ' Returns true if the script host is cscript.exe
  363. '
  364. function IsHostCscript()
  365.  
  366.     on error resume next
  367.     
  368.     dim strFullName 
  369.     dim strCommand 
  370.     dim i, j 
  371.     dim bReturn
  372.     
  373.     bReturn = false
  374.     
  375.     strFullName = WScript.FullName
  376.     
  377.     i = InStr(1, strFullName, ".exe", 1)
  378.     
  379.     if i <> 0 then
  380.         
  381.         j = InStrRev(strFullName, "\", i, 1)
  382.         
  383.         if j <> 0 then
  384.             
  385.             strCommand = Mid(strFullName, j+1, i-j-1)
  386.             
  387.             if LCase(strCommand) = "cscript" then
  388.             
  389.                 bReturn = true  
  390.             
  391.             end if    
  392.                 
  393.         end if
  394.         
  395.     end if
  396.     
  397.     if Err <> 0 then
  398.     
  399.         call wscript.echo("Error 0x" & hex(Err.Number) & " occurred. " & Err.Description _
  400.                           & ". " & vbCRLF & "The scripting host could not be determined.")       
  401.         
  402.     end if
  403.     
  404.     IsHostCscript = bReturn
  405.  
  406. end function
  407.  
  408.