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

  1. '----------------------------------------------------------------------
  2. '
  3. ' Copyright (c) Microsoft Corporation 1998-1999
  4. ' All Rights Reserved
  5. '
  6. ' Abstract:
  7. '
  8. ' prncfg.vbs - printer configuration script for Windows 2000
  9. '
  10. ' Usage:
  11. ' prncfg [-gs?] [-b printer][-r port]
  12. '               [-l location][-m comment][-s share][-f sep-file]
  13. '               [-t data-type][-a attributes [+|-]value> etc.]
  14. ' Examples:
  15. ' prncfg.vbs -g -b \\server\printer
  16. ' prncfg.vbs -s -b printer -l "Office" -m "HP 4L"
  17. ' prncfg.vbs -s -b printer -h "Share" -a "attributes +shared attributes -direct"
  18. '----------------------------------------------------------------------
  19.  
  20. option explicit
  21.  
  22. '
  23. ' Debugging trace flags, to enable debug output trace message
  24. ' change gDebugFlag to true.
  25. '
  26. const kDebugTrace = 1
  27. const kDebugError = 2
  28. dim   gDebugFlag
  29.  
  30. gDebugFlag = false
  31.  
  32. '
  33. ' Messages to be displayed if the scripting host is not cscript
  34. '                            
  35. const kMessage1 = "Please run this script using CScript."  
  36. const kMessage2 = "This can be achieved by"
  37. const kMessage3 = "1. Using ""CScript script.vbs arguments"" or" 
  38. const kMessage4 = "2. Changing the default Windows Scripting Host to CScript"
  39. const kMessage5 = "   using ""CScript //H:CScript //S"" and running the script "
  40. const kMessage6 = "   ""script.vbs arguments""."
  41.  
  42. '
  43. ' Operation action values.
  44. '
  45. const kActionUnknown    = 0
  46. const kActionSet        = 1
  47. const kActionGet        = 2
  48.  
  49. const kErrorSuccess     = 0
  50. const KErrorFailure     = 1
  51.  
  52. const kPrinterQueued          = 1
  53. const kPrinterDirect          = 2
  54. const kPrinterDefault         = 4
  55. const kPrinterShared          = 8
  56. const kPrinterNetwork         = 16
  57. const kPrinterHidden          = 32
  58. const kPrinterLocal           = 64
  59. const kPrinterEnableDevq      = 128
  60. const kPrinterKeepPrinterJobs = 256
  61. const kPrinterDoCompleteFirst = 512
  62. const kPrinterWorkOffline     = 1024
  63. const kPrinterEnableBidi      = 2048
  64. const kPrinterRawOnly         = 4096
  65. const kPrinterPublished       = 8192
  66.  
  67. const kPrinterStatusPaused           = 1
  68. const kPrinterStatusError            = 2
  69. const kPrinterStatusPendingDeletion  = 4
  70. const kPrinterStatusPapeJam          = 8
  71. const kPrinterStatusPaperOut         = 16
  72. const kPrinterStatusManualFeed       = 32
  73. const kPrinterStatusPaperProblem     = 64
  74. const kPrinterStatusOffline          = 128
  75. const kPrinterStatusIOActive         = 256
  76. const kPrinterStatusBusy             = 512
  77. const kPrinterStatusPrinting         = 1024
  78. const kPrinterStatusOuptutBinFull    = 2048
  79. const kPrinterStatusNotAvailable     = 4096
  80. const kPrinterStatusWaiting          = 8192
  81. const kPrinterStatusProcessing       = 16834
  82. const kPrinterStatusInitializing     = 32768
  83. const kPrinterStatusWarmingUp        = 65536
  84. const kPrinterStatusTonerLow         = 131072
  85. const kPrinterStatusNoToner          = 262144
  86. const kPrinterStatusPagePunt         = 524288
  87. const kPrinterStatusUserIntervention = 1048576
  88. const kPrinterStatusOutOfMemory      = 2097152
  89. const kPrinterStatusDoorOpen         = 4194304
  90. const kPrinterStatusServerUnknown    = 8388608
  91. const kPrinterStatusPowerSave        = 16777216
  92.  
  93.  
  94. main
  95.  
  96. '
  97. ' Main execution starts here
  98. '
  99. sub main
  100.  
  101.     dim iAction
  102.     dim iRetval
  103.     dim strPrinter, strPort, strShare, strComment
  104.     dim strLocation, Data, strSep, strNewName
  105.     dim ParamDict, AttributeDictionary, StatusDictionary
  106.     
  107.     '
  108.     ' Abort if the host is not cscript
  109.     '
  110.     if not IsHostCscript() then
  111.    
  112.         call wscript.echo(kMessage1 & vbCRLF & kMessage2 & vbCRLF & _
  113.                           kMessage3 & vbCRLF & kMessage4 & vbCRLF & _
  114.                           kMessage5 & vbCRLF & kMessage6 & vbCRLF)
  115.         
  116.         wscript.quit
  117.    
  118.     end if
  119.     
  120.     set ParamDict           = CreateObject("Scripting.Dictionary")
  121.     set AttributeDictionary = CreateObject("Scripting.Dictionary")
  122.     set StatusDictionary    = CreateObject("Scripting.Dictionary")
  123.     
  124.     BuildAttributeDictionary  AttributeDictionary
  125.     BuildStatusDictionary     StatusDictionary
  126.     
  127.     iRetval = ParseCommandLine(iAction, strPrinter, strPort, strShare, strComment, _
  128.                                strLocation, Data, strSep, strNewName, ParamDict)
  129.  
  130.     if iRetval = kErrorSuccess then
  131.         
  132.         select case iAction
  133.  
  134.             case kActionSet
  135.                  iRetval = SetPrinter(strPrinter, strPort, strShare, strComment, _
  136.                                       strLocation, Data, strSep, strNewName, ParamDict)
  137.  
  138.             case kActionGet
  139.                  iRetval = GetPrinter(strPrinter, AttributeDictionary, StatusDictionary)
  140.  
  141.             case else
  142.                  Usage(True)
  143.                  exit sub
  144.  
  145.         end select
  146.  
  147.     end if
  148.  
  149. end sub
  150.  
  151. '
  152. ' Get printer configuration
  153. '
  154. function GetPrinter(strPrinterName, AttributeDictionary, StatusDictionary)
  155.  
  156.     on error resume next
  157.  
  158.     DebugPrint kDebugTrace, "In GetPrinter"
  159.  
  160.     dim oPrinter
  161.     dim oMaster
  162.     dim iRetval
  163.  
  164.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")           
  165.     set oPrinter = CreateObject("Printer.Printer.1")
  166.  
  167.     oMaster.PrinterGet "", strPrinterName, oPrinter
  168.  
  169.     if Err.Number = kErrorSuccess then
  170.  
  171.         wscript.echo "Success: getting printer config"
  172.  
  173.         wscript.echo
  174.         wscript.echo "PrinterName:  " & oPrinter.PrinterName
  175.         wscript.echo "ShareName:    " & oPrinter.ShareName
  176.         wscript.echo "PortName:     " & oPrinter.PortName
  177.         wscript.echo "DriverName    " & oPrinter.DriverName
  178.         wscript.echo "Comment:      " & oPrinter.Comment
  179.         wscript.echo "Location:     " & oPrinter.Location
  180.         wscript.echo "SepFile:      " & oPrinter.Sepfile
  181.         wscript.echo "PrintProc:    " & oPrinter.PrintProcessor
  182.         wscript.echo "Datatype:     " & oPrinter.Datatype
  183.         wscript.echo "Parameters:   " & oPrinter.Parameters
  184.  
  185.         BuildExplanationString AttributeDictionary, oPrinter.Attributes, "Attributes:   "
  186.  
  187.         wscript.echo "Priority:     " & CStr(oPrinter.Priority)
  188.         wscript.echo "DefaultPri:   " & CStr(oPrinter.DefaultPriority)
  189.         wscript.echo "StartTime:    " & CStr(oPrinter.StartTime)
  190.         wscript.echo "UntilTime:    " & CStr(oPrinter.UntilTime)
  191.         
  192.         if oPrinter.Status = 0 then 
  193.         
  194.             wscript.echo "Status:       Ready"
  195.         
  196.         else 
  197.         
  198.             BuildExplanationString StatusDictionary, oPrinter.Status, "Status:       "
  199.             
  200.         end if    
  201.         
  202.         wscript.echo "Jobcount:     " & CStr(oPrinter.Jobs)
  203.         wscript.echo "AveragePPM    " & CStr(oPrinter.AveragePPM)
  204.         wscript.echo
  205.  
  206.         iRetval = kErrorSuccess
  207.  
  208.     else
  209.  
  210.         wscript.echo "Unable to get the printer config, error: 0x" & _
  211.                      Hex(Err.Number) & ". " & Err.Description
  212.         
  213.         iRetval = kErrorFailure
  214.  
  215.     end if
  216.  
  217.     GetPrinter = iRetval
  218.  
  219. end function
  220.  
  221. '
  222. ' Configure a printer
  223. '
  224. function SetPrinter(strPrinter, strPort, strShare, strComment, strLocation, Data, strSep, strNewName, AttrDict)
  225.  
  226.     on error resume next
  227.  
  228.     DebugPrint kDebugTrace, "In SetPrinter"
  229.  
  230.     dim oPrinter
  231.     dim oMaster
  232.     dim iRetval
  233.     
  234.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")               
  235.     set oPrinter = CreateObject("Printer.Printer.1")
  236.  
  237.     oMaster.PrinterGet "", strPrinter, oPrinter
  238.  
  239.     if strPort <> "" then
  240.  
  241.         oPrinter.PortName = strPort
  242.  
  243.     end if
  244.  
  245.     if strShare <> "" then
  246.  
  247.         oPrinter.ShareName = strShare
  248.  
  249.     end if
  250.  
  251.     if strLocation <> "" then
  252.  
  253.         oPrinter.Location = strLocation
  254.  
  255.     end if
  256.  
  257.     if strComment <> "" then
  258.  
  259.         oPrinter.Comment = strComment
  260.  
  261.     end if
  262.  
  263.     if Data <> "" then
  264.  
  265.         oPrinter.DataType = Data
  266.  
  267.     end if
  268.  
  269.     oPrinter.NewName = strNewName
  270.  
  271.     oPrinter.SepFile = strSep
  272.  
  273.     ' Field Queued
  274.     '
  275.     if AttrDict.Exists("queued") then
  276.         
  277.         oPrinter.Queued = AttrDict.Item("queued")
  278.     
  279.     end if
  280.  
  281.     ' Field Direct
  282.     '
  283.     if AttrDict.Exists("direct") then
  284.         
  285.         oPrinter.Direct = AttrDict.Item("direct")
  286.     
  287.     end if
  288.  
  289.     ' Field Default
  290.     '
  291.     if AttrDict.Exists("default") then
  292.  
  293.         oPrinter.Default = AttrDict.Item("default")
  294.  
  295.     end if
  296.  
  297.     ' Field Shared
  298.     '
  299.     if AttrDict.Exists("shared") then
  300.         
  301.         oPrinter.Shared = AttrDict.Item("shared")
  302.         
  303.     end if
  304.  
  305.     ' Field Hidden
  306.     '
  307.     if AttrDict.Exists("hidden") then
  308.         
  309.         oPrinter.Hidden = AttrDict.Item("hidden")
  310.         
  311.     end if
  312.  
  313.     ' Field EnableDevq
  314.     '
  315.     if AttrDict.Exists("enabledevq") then
  316.                 
  317.         oPrinter.EnableDevq = AttrDict.Item("enabledevq")
  318.             
  319.     end if
  320.  
  321.     ' Field KeepPrintedJobs
  322.     '
  323.     if AttrDict.Exists("keepprintedjobs") then
  324.  
  325.         oPrinter.KeepPrintedJobs = AttrDict.Item("keepprintedjobs")
  326.  
  327.     end if
  328.  
  329.     ' Field DocompleteFirst
  330.     '
  331.     if AttrDict.Exists("docompletefirst") then
  332.         
  333.         oPrinter.DoCompleteFirst = AttrDict.Item("docompletefirst")
  334.         
  335.     end if
  336.  
  337.     ' Field workOffline
  338.     '
  339.     if AttrDict.Exists("workoffline") then
  340.           
  341.         oPrinter.WorkOffline = AttrDict.Item("workoffline")
  342.         
  343.     end if
  344.  
  345.     ' Field EnableBidi
  346.     '
  347.     if AttrDict.Exists("enablebidi") then
  348.         
  349.         oPrinter.EnableBidi = AttrDict.Item("enablebidi")
  350.         
  351.     end if
  352.  
  353.     ' Field RawOnly
  354.     '
  355.     if AttrDict.Exists("rawonly") then
  356.         
  357.         oPrinter.RawOnly = AttrDict.Item("rawonly")
  358.         
  359.     end if
  360.  
  361.     ' Field Published
  362.     '
  363.     if AttrDict.Exists("published") then
  364.         
  365.         oPrinter.Published = AttrDict.Item("published")
  366.         
  367.     end if
  368.     
  369.     oMaster.PrinterSet oPrinter
  370.  
  371.     if Err.Number = kErrorSuccess then
  372.  
  373.         wscript.echo "Success: configuring printer """ & strPrinter & """ "
  374.  
  375.         iRetval = kErrorSuccess
  376.  
  377.     else
  378.  
  379.         wscript.echo "Unable to configure printer """ & strPrinter & """, error: 0x"_
  380.                      & Hex(Err.Number) & " " & Err.Description
  381.         
  382.         iRetval = kErrorFailure
  383.  
  384.     end if
  385.  
  386.     SetPrinter = iRetval
  387.  
  388. end function
  389.  
  390. '
  391. ' Builds a string description of the number
  392. ' The bits in the number have values associated in the dictionary
  393. '
  394. sub BuildExplanationString(oDict, Number, strInit)
  395.  
  396.     on error resume next
  397.  
  398.     dim strExpl 
  399.     dim AllKeys 
  400.     dim iIndex
  401.     
  402.     strExpl = strInit
  403.  
  404.     AllKeys = oDict.Keys
  405.     
  406.     for iIndex = 0 to oDict.Count -1 
  407.     
  408.         if (Number and AllKeys(iIndex)) = AllKeys(iIndex) then
  409.         
  410.             strExpl = strExpl + oDict.Item(AllKeys(iIndex))
  411.         
  412.         end if
  413.     
  414.     next
  415.     
  416.     wscript.echo strExpl
  417.  
  418. end sub
  419.  
  420. '
  421. ' Initializes the AttributeDictionary
  422. '         
  423. sub BuildAttributeDictionary(AttrExplanationDict)
  424.     
  425.     AttrExplanationDict.Add kPrinterQueued,          "Queued "
  426.     AttrExplanationDict.Add kPrinterDirect,          "Direct "
  427.     AttrExplanationDict.Add kPrinterDefault,         "Default "
  428.     AttrExplanationDict.Add kPrinterShared,          "Shared "
  429.     AttrExplanationDict.Add kPrinterNetwork,         "Network "
  430.     AttrExplanationDict.Add kPrinterHidden,          "Hidden "
  431.     AttrExplanationDict.Add kPrinterLocal,           "Local "
  432.     AttrExplanationDict.Add kPrinterEnableDevq,      "EnableDevq "
  433.     AttrExplanationDict.Add kPrinterKeepPrinterJobs, "KeepPrintedJobs "
  434.     AttrExplanationDict.Add kPrinterDoCompleteFirst, "DoCompleteFirst "
  435.     AttrExplanationDict.Add kPrinterWorkOffline,     "WorkOffLine "
  436.     AttrExplanationDict.Add kPrinterEnableBidi,      "EnbleBiDi "
  437.     AttrExplanationDict.Add kPrinterRawOnly,         "RawOnly "
  438.     AttrExplanationDict.Add kPrinterPublished,       "Published "
  439.     
  440. end sub
  441.  
  442. '
  443. ' Initializes the AttributeDictionary
  444. '         
  445. sub BuildStatusDictionary(StatusDict)
  446.     
  447.     StatusDict.Add kPrinterStatusPaused,          "Paused "
  448.     StatusDict.Add kPrinterStatusError,           "Error "
  449.     StatusDict.Add kPrinterStatusPendingDeletion, "PendingDeletion "
  450.     StatusDict.Add kPrinterStatusPapeJam,         "PaperJam "
  451.     StatusDict.Add kPrinterStatusPaperOut,        "PaperOut "
  452.     StatusDict.Add kPrinterStatusManualFeed,      "ManualFeed "
  453.     StatusDict.Add kPrinterStatusPaperProblem,    "PaperProblem "
  454.     StatusDict.Add kPrinterStatusOffline,         "Offline "
  455.     StatusDict.Add kPrinterStatusIOActive,        "IOActive "
  456.     StatusDict.Add kPrinterStatusBusy,            "Busy "
  457.     StatusDict.Add kPrinterStatusPrinting,        "Printing "
  458.     StatusDict.Add kPrinterStatusOuptutBinFull,   "OutputBinFull "
  459.     StatusDict.Add kPrinterStatusNotAvailable,    "NotAvailable "
  460.     StatusDict.Add kPrinterStatusWaiting,         "Waiting "
  461.     StatusDict.Add kPrinterStatusProcessing,      "Processing "
  462.     StatusDict.Add kPrinterStatusInitializing,    "Initializing "
  463.     StatusDict.Add kPrinterStatusWarmingUp,       "Warming Up "
  464.     StatusDict.Add kPrinterStatusTonerLow,        "TonerLow "
  465.     StatusDict.Add kPrinterStatusNoToner,         "NoToner "
  466.     StatusDict.Add kPrinterStatusPagePunt,        "PagePunt "
  467.     StatusDict.Add kPrinterStatusUserIntervention,"UserIntervention "  
  468.     StatusDict.Add kPrinterStatusOutOfMemory,     "OutOfMemory " 
  469.     StatusDict.Add kPrinterStatusDoorOpen,        "DoorOpen " 
  470.     StatusDict.Add kPrinterStatusServerUnknown,   "ServerUnknown " 
  471.     StatusDict.Add kPrinterStatusPowerSave,       "PowerSave " 
  472.  
  473. end sub
  474.  
  475. '
  476. ' Prints the contents of the dictionary
  477. '
  478. sub PrintDictionary(oDict)
  479.  
  480.    dim KeyArray
  481.    dim iIndex
  482.    
  483.    wscript.echo "Iterating the dictionary"
  484.    
  485.    KeyArray = oDict.Keys  
  486.     
  487.    for iIndex = 0 to oDict.Count -1
  488.     
  489.        wscript.echo KeyArray(iIndex) & "  " & dict.Item(KeyArray(iIndex))
  490.       
  491.    next
  492.    
  493. end sub
  494.  
  495. '
  496. ' Debug display helper function
  497. '
  498. sub DebugPrint(uFlags, strString)
  499.  
  500.     if gDebugFlag = true then
  501.  
  502.         if uFlags = kDebugTrace then
  503.  
  504.             wscript.echo "Debug: " & strString
  505.  
  506.         end if
  507.  
  508.         if uFlags = kDebugError then
  509.  
  510.             if Err <> 0 then
  511.  
  512.                 wscript.echo "Debug: " & strString & " Failed with " & Hex(Err)
  513.  
  514.             end if
  515.  
  516.         end if
  517.  
  518.     end if
  519.  
  520. end sub
  521.  
  522. '
  523. ' Parse the command line into it's components
  524. '
  525. function ParseCommandLine(iAction, strPrinter, strPort, strShare, strComment, strLocation, Data, strSep, strNewName, AttrDict)
  526.  
  527.     on error resume next
  528.  
  529.     DebugPrint kDebugTrace, "In the ParseCommandLine"
  530.  
  531.     dim oArgs
  532.     dim iIndex  
  533.  
  534.     iAction = kActionUnknown
  535.     iIndex = 0
  536.  
  537.     set oArgs = wscript.Arguments
  538.  
  539.     while iIndex < oArgs.Count
  540.  
  541.         select case oArgs(iIndex)
  542.  
  543.             case "-g"
  544.                 iAction = kActionGet
  545.  
  546.             case "-s"
  547.                 iAction = kActionSet
  548.  
  549.             case "-b"
  550.                 iIndex = iIndex + 1
  551.                 strPrinter = oArgs(iIndex)
  552.  
  553.             case "-r"
  554.                 iIndex = iIndex + 1
  555.                 strPort = oArgs(iIndex)
  556.  
  557.             case "-h"
  558.                 iIndex = iIndex + 1
  559.                 strShare = oArgs(iIndex)
  560.  
  561.             case "-m"
  562.                 iIndex = iIndex + 1
  563.                 strComment = oArgs(iIndex)
  564.  
  565.             case "-l"
  566.                 iIndex = iIndex + 1
  567.                 strLocation = oArgs(iIndex)
  568.  
  569.             case "-t"
  570.                 iIndex = iIndex + 1
  571.                 Data = oArgs(iIndex)
  572.  
  573.             case "-f"
  574.                 iIndex = iIndex + 1
  575.                 strSep = oArgs(iIndex)
  576.  
  577.             case "-w"
  578.                 iIndex = iIndex + 1
  579.                 strNewName = oArgs(iIndex)
  580.  
  581.             case "-queued"
  582.                 AttrDict.Add "queued", false
  583.                 
  584.             case "+queued"
  585.                 AttrDict.Add "queued", true
  586.  
  587.             case "-direct"
  588.                 AttrDict.Add "direct", false
  589.  
  590.             case "+direct"
  591.                 AttrDict.Add "direct", true
  592.  
  593.             case "-default"
  594.                 AttrDict.Add "default", false
  595.  
  596.             case "+default"
  597.                 AttrDict.Add "default", true
  598.  
  599.             case "-shared"
  600.                 AttrDict.Add "shared", false
  601.  
  602.             case "+shared"
  603.                 AttrDict.Add "shared", true
  604.  
  605.             case "-hidden"
  606.                 AttrDict.Add "hidden", false
  607.  
  608.             case "+hidden"
  609.                 AttrDict.Add "hidden", true
  610.  
  611.             case "-enabledevq"
  612.                 AttrDict.Add "enabledevq", false
  613.                 
  614.             case "+enabledevq"
  615.                 AttrDict.Add "enabledevq", true
  616.  
  617.             case "-keepprintedjobs"
  618.                 AttrDict.Add "keepprintedjobs", false
  619.  
  620.             case "+keepprintedjobs"
  621.                 AttrDict.Add "keepprintedjobs", true
  622.  
  623.             case "-docompletefirst"
  624.                 AttrDict.Add "docompletefirst", false
  625.  
  626.             case "+docompletefirst"
  627.                 AttrDict.Add "docompletefirst", true
  628.  
  629.             case "-workoffline"
  630.                 AttrDict.Add "workoffline", false
  631.  
  632.             case "+workoffline"
  633.                 AttrDict.Add "workoffline", true
  634.  
  635.             case "-enablebidi"
  636.                 AttrDict.Add "enablebidi", true
  637.  
  638.             case "+enablebidi"
  639.                 AttrDict.Add "enablebidi", true
  640.  
  641.             case "-rawonly"
  642.                 AttrDict.Add "rawonly", false
  643.  
  644.             case "+rawonly"
  645.                 AttrDict.Add "rawonly", true
  646.  
  647.             case "-published"
  648.                 AttrDict.Add "published", false
  649.  
  650.             case "+published"
  651.                 AttrDict.Add "published", true
  652.  
  653.             case "-?"
  654.                 Usage(true)
  655.                 exit function
  656.  
  657.             case else
  658.                 Usage(true)
  659.                 exit function
  660.  
  661.         end select
  662.  
  663.         iIndex = iIndex + 1
  664.  
  665.     wend
  666.     
  667.     if Err = kErrorSuccess then
  668.  
  669.         ParseCommandLine = kErrorSuccess
  670.         
  671.     else    
  672.     
  673.         wscript.echo "Unable to parse command line, error 0x" & Hex(Err.Number) _ 
  674.                      & ". " & Err.Description
  675.         
  676.         ParseCommandLine = kErrorFailure
  677.  
  678.     end if
  679.     
  680. end function
  681.  
  682. '
  683. ' Display command usage.
  684. '
  685. sub Usage(bExit)
  686.  
  687.     wscript.echo "Usage: prncfg [-gs?] [-b printer][-r port][-w new printer name]"
  688.     wscript.echo "              [-l location][-m comment][-h share name][-f sep file]"
  689.     wscript.echo "              [-t datatype][<+|->shared][<+|->direct][<+\->default][<+|->published]"
  690.     wscript.echo "              [<+|->rawonly][<+|->keepprintedjobs][<+|->queued]"
  691.     wscript.echo "Arguments:"
  692.     wscript.echo "-g     - get configuration"
  693.     wscript.echo "-s     - set configuration"
  694.     wscript.echo "-?     - display command usage"
  695.     wscript.echo "-b     - printer name"
  696.     wscript.echo "-r     - port name"
  697.     wscript.echo "-w     - new printer name"
  698.     wscript.echo "-l     - location string"
  699.     wscript.echo "-h     - share name"
  700.     wscript.echo "-f     - separator file string"
  701.     wscript.echo "-t     - data type string"
  702.     wscript.echo "-m     - comment string"
  703.     wscript.echo ""
  704.     wscript.echo "Examples:"
  705.     wscript.echo "prncfg.vbs -g -b \\server\printer"
  706.     wscript.echo "prncfg.vbs -s -b Printer -l ""Building A/Floor 100/Office 1"""
  707.     wscript.echo "prncfg.vbs -s -b Printer -h ""Share"" +shared -direct"
  708.     wscript.echo "prncfg.vbs -s -b Printer +rawonly +keepprintedjobs"
  709.  
  710.     if bExit then
  711.  
  712.         wscript.quit(1)
  713.  
  714.     end if
  715.  
  716. end sub
  717.  
  718. '
  719. ' Determines which program is used to run this script. 
  720. ' Returns true if the script host is cscript.exe
  721. '
  722. function IsHostCscript()
  723.  
  724.     on error resume next
  725.     
  726.     dim strFullName 
  727.     dim strCommand 
  728.     dim i, j 
  729.     dim bReturn
  730.     
  731.     bReturn = false
  732.     
  733.     strFullName = WScript.FullName
  734.     
  735.     i = InStr(1, strFullName, ".exe", 1)
  736.     
  737.     if i <> 0 then
  738.         
  739.         j = InStrRev(strFullName, "\", i, 1)
  740.         
  741.         if j <> 0 then
  742.             
  743.             strCommand = Mid(strFullName, j+1, i-j-1)
  744.             
  745.             if LCase(strCommand) = "cscript" then
  746.             
  747.                 bReturn = true  
  748.             
  749.             end if    
  750.                 
  751.         end if
  752.         
  753.     end if
  754.     
  755.     if Err <> 0 then
  756.     
  757.         call wscript.echo("Error 0x" & hex(Err.Number) & " occurred. " & Err.Description _
  758.                           & ". " & vbCRLF & "The scripting host could not be determined.")       
  759.         
  760.     end if
  761.     
  762.     IsHostCscript = bReturn
  763.  
  764. end function
  765.  
  766.