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

  1. //----------------------------------------------------------------------
  2. //
  3. // Copyright (c) Microsoft Corporation 1998-1999
  4. // All Rights Reserved
  5. //
  6. // Abstract:
  7. //
  8. // prndemo.js -PrnAdmin demo JavaScript
  9. //
  10. // Usage:
  11. // prndemo.js [-agl?][-b printer][-c server][-i ip-adrress]");
  12. //                   [-d driver][-p port]");
  13. //
  14. // Examples:
  15. //   prndemo.js -g -i 1.2.3.4
  16. //   prndemo.js -a -b Printer -d "Driver" -p lpt1:
  17. //   prndemo.js -a -b Printer -d "Driver" -p 1.2.3.4
  18. //   prndemo.js -l -c \\server
  19. //
  20. //---------------------------------------------------------------------
  21.  
  22. //
  23. // Debugging trace flags, to enable debug output trace message
  24. // change gDebugFlag to true.
  25. //
  26. kDebugTrace = 1;
  27. kDebugError = 2;
  28. gDebugFlag = false;
  29.  
  30. //
  31. // Message to be displayed if the scripting host is not cscript
  32. //                            
  33. kMessage = "Please run this script using CScript.\n" +
  34.            "This can be achieved by\n" +
  35.            "1. Using \"CScript script.vbs arguments\" or\n" +
  36.            "2. Changing the default Windows Scripting Host to CScript\n" +
  37.            "   using \"CScript //H:CScript //S\" and running the script \n" +
  38.            "   \"script.vbs arguments\".\n";
  39.  
  40. //
  41. // Operation action values.
  42. //
  43. kActionUnknown = 0;
  44. kActionAdd     = 1;
  45. kActionGet     = 2;
  46. kActionList    = 3;
  47.  
  48. //
  49. // Port Types
  50. //
  51. kTcpRaw   = 1;
  52. kTcpLPr   = 2;
  53. kLocal    = 3;
  54. kLprMon   = 5;
  55. kHPdlc    = 7;
  56. kUnknown  = 8;
  57.  
  58. kErrorSuccess = 0;
  59. kErrorExists  = 52;
  60.  
  61. //
  62. // The only supported conversion is from lpr mon to tcp
  63. //
  64. kLprToTcp = 1
  65.  
  66. main();
  67.  
  68. //
  69. // Main execution start here
  70. //
  71. function main()
  72. {
  73.     var iAction
  74.     var ParamDict = new ActiveXObject("Scripting.Dictionary");
  75.  
  76.     //
  77.     // Abort if the host is not cscript
  78.     //
  79.     if (!IsHostCscript())
  80.     {
  81.         WScript.echo(kMessage);
  82.         
  83.         WScript.quit();
  84.     }
  85.     
  86.     iAction = ParseCommandLine(ParamDict);
  87.  
  88.     switch(iAction)
  89.     {
  90.     case kActionList:
  91.              ListPrinters(ParamDict);
  92.              break;
  93.                  
  94.     case kActionGet:    
  95.              GetEquivalent(ParamDict);
  96.              break;
  97.  
  98.     case kActionAdd:
  99.              AddPrinter(ParamDict);
  100.              break;
  101.     
  102.     default:
  103.              Usage(true);
  104.     }    
  105. }
  106.  
  107. //
  108. // Get the TCP equivalent of a lpr mon port
  109. //
  110. function GetEquivalent(ParamDict)
  111. {
  112.     DebugPrint(kDebugTrace, "In GetEquivalent");
  113.     
  114.     var oMaster;
  115.     var oPort;
  116.     
  117.     try {
  118.  
  119.         oMaster = new ActiveXObject("PrintMaster.PrintMaster.1");
  120.         
  121.         oPort   = new ActiveXObject("Port.Port.1");
  122.     
  123.         oPort.HostAddress = ParamDict.Item("IPAddress");
  124.         
  125.         oMaster.PortConversion(oPort, kLprToTcp);
  126.  
  127.         if (oPort.DeviceType != "") 
  128.         {
  129.             WScript.echo("DeviceType  " + oPort.DeviceType);
  130.         }
  131.         else
  132.         {
  133.             WScript.echo("The device did not respond. Default port settings will be displayed");
  134.         }
  135.         
  136.         WScript.echo("Name        " + oPort.PortName);
  137.         WScript.echo("HostAddress " + oPort.HostAddress);
  138.         
  139.         if (oPort.PortType == kTcpRaw)
  140.         { 
  141.             WScript.echo("Protocol    RAW");
  142.             
  143.             WScript.echo("PortNumber  " + oPort.PortNumber);
  144.         }
  145.         else
  146.         {
  147.             WScript.echo("Protocol    LPR")
  148.         
  149.             WScript.echo("Queue       " + oPort.QueueName);
  150.         }
  151.         
  152.         WScript.echo(oPort.SNMP        ? "SNMP        Enabled" : "SNMP        Disabled");
  153.         
  154.         WScript.echo(oPort.DoubleSpool ? "DoubleSpool Yes"     : "DoubleSpool No");        
  155.     }
  156.     catch(Err)
  157.     {
  158.         WScript.echo("Error " + (0xFFFF & Err.number).toString() + ". " + Err.description);     
  159.     }
  160. }
  161.  
  162. //
  163. // Add a printer
  164. //
  165. function AddPrinter(ParamDict)
  166. {
  167.     DebugPrint(kDebugTrace, "In AddPrinter");
  168.  
  169.     var oMaster; 
  170.     var oPort;
  171.     var oPrinter;
  172.     
  173.     try {
  174.  
  175.         oMaster  = new ActiveXObject("PrintMaster.PrintMaster.1");
  176.  
  177.         oPort    = new ActiveXObject("Port.Port.1");
  178.  
  179.         oPrinter = new ActiveXObject("Printer.Printer.1");
  180.  
  181.         //
  182.         // Check if the user passed in a port name
  183.         //
  184.         if (ParamDict.Exists("Port")) 
  185.         {
  186.             oPrinter.PortName = ParamDict.Item("Port");
  187.         }
  188.         else if (ParamDict.Exists("IPAddress")) 
  189.         {
  190.             oPort.HostAddress = ParamDict.Item("IPAddress");
  191.        
  192.             oMaster.PortConversion(oPort, kLprToTcp);
  193.  
  194.             //
  195.             // Add the TCP port
  196.             // 
  197.             try 
  198.             {
  199.                 oPort.ServerName = ParamDict.Item("Server");
  200.  
  201.                 oMaster.PortAdd(oPort);
  202.             }
  203.             catch(Err)
  204.             {
  205.                 //
  206.                 // Check if port already exists; if it doesn't then propagate the error
  207.                 // 
  208.                 if (Err.number & 0xFFFF != kErrorExists) 
  209.                 {
  210.                    throw Err;
  211.                 }                
  212.             }
  213.  
  214.             oPrinter.PortName = oPort.PortName;
  215.         }
  216.  
  217.         oPrinter.PrinterName = ParamDict.Item("Printer");
  218.         
  219.         oPrinter.DriverName  = ParamDict.Item("Driver");
  220.  
  221.         oPrinter.ServerName  = ParamDict.Item("Server");
  222.  
  223.         oMaster.PrinterAdd(oPrinter); 
  224.         
  225.         WScript.echo("Success adding printer " + oPrinter.PrinterName);
  226.     }
  227.     catch(Err)
  228.     {
  229.         WScript.echo("Error " + (0xFFFF & Err.number).toString() + ". " + Err.description);        
  230.     }
  231. }
  232.  
  233. //
  234. // List Printers
  235. //
  236. function ListPrinters(ParamDict)
  237. {
  238.     var oMaster;
  239.     var oPrinter; 
  240.     var Enum; 
  241.  
  242.     try 
  243.     {
  244.         oMaster = new ActiveXObject("PrintMaster.PrintMaster.1");
  245.  
  246.         Enum    = new Enumerator(oMaster.Printers(ParamDict.Item("Server")));
  247.  
  248.         WScript.echo("Listing printers\n");
  249.  
  250.         for (; !Enum.atEnd(); Enum.moveNext())
  251.         {
  252.             oPrinter = Enum.item();
  253.  
  254.             WScript.echo(oPrinter.PrinterName);
  255.         }
  256.  
  257.         WScript.echo("Success listing printers");
  258.     }
  259.     catch(Err)
  260.     {
  261.        WScript.echo("Error listing printers " + (0xFFFF & Err.number).toString(16) + ". " + Err.description);
  262.     }
  263. }
  264.  
  265. //
  266. // Debug display helper function
  267. //
  268. function DebugPrint(Flags, Str)
  269. {
  270.     if (gDebugFlag)
  271.     {
  272.         if (Flags == kDebugTrace)
  273.         {
  274.             WScript.echo(Str);
  275.         }
  276.     }
  277. }
  278.         
  279. //
  280. // Parse the command line into it's components
  281. //
  282. function ParseCommandLine(ParamDict)
  283. {
  284.     DebugPrint(kDebugTrace, "In the ParseCommandLine");
  285.  
  286.     var oArgs;
  287.     var strArg; 
  288.     var i, iAction;
  289.  
  290.     oArgs = WScript.Arguments;
  291.  
  292.     iAction = kActionUnknown;
  293.  
  294.     for (i = 0; i < oArgs.length; i++)
  295.     {
  296.         switch(oArgs(i))
  297.         {
  298.         case "-a":
  299.                 iAction = kActionAdd;
  300.                 break;
  301.                 
  302.         case "-g":
  303.                 iAction = kActionGet;
  304.                 break;
  305.                 
  306.         case "-l":
  307.                 iAction = kActionList; 
  308.                 break;
  309.             
  310.         case "-i":
  311.                 ParamDict.Add("IPAddress", oArgs(++i));
  312.                 break;
  313.                 
  314.         case "-b":
  315.                 ParamDict.Add("Printer", oArgs(++i));
  316.                 break;
  317.  
  318.         case "-p":
  319.                 ParamDict.Add("Port", oArgs(++i));
  320.                 break;
  321.                 
  322.         case "-c":
  323.                 ParamDict.Add("Server", oArgs(++i));
  324.                 break;
  325.                 
  326.         case "-d":
  327.                 ParamDict.Add("Driver", oArgs(++i));    
  328.                 break;
  329.                 
  330.         case "-?":
  331.                 Usage(true);
  332.                 return;
  333.  
  334.         default:
  335.                 Usage(true);
  336.                 return;
  337.         }       
  338.     }
  339.                      
  340.     return iAction;
  341. }
  342.  
  343. //
  344. // Display command usage.
  345. //
  346. function Usage(bExit)
  347. {
  348.     WScript.echo("PrnAdmin demo JavaScript");
  349.     WScript.echo("Usage: prndemo.js [-agl?][-b printer][-c server][-i ip-adrress]");
  350.     WScript.echo("                         [-d driver][-p port]");
  351.     WScript.echo("Arguments:");
  352.     WScript.echo("-a     - adds a printer with the specified driver");
  353.     WScript.echo("-l     - list printers");
  354.     WScript.echo("-g     - for an IP address, gets the preferred device settings");
  355.     WScript.echo("-c     - server name");
  356.     WScript.echo("-d     - driver name");
  357.     WScript.echo("-p     - port name");
  358.     WScript.echo("-i     - ip address");
  359.     WScript.echo("");
  360.     WScript.echo("Examples:");
  361.     WScript.echo("prndemo.js -g -i 1.2.3.4");
  362.     WScript.echo("prndemo.js -a -b Printer -d \"Driver\" -p lpt1:");
  363.     WScript.echo("prndemo.js -a -b Printer -d \"Driver\" -i 1.2.3.4");
  364.     WScript.echo("prndemo.js -l -c \\\\server");
  365.  
  366.     WScript.echo("\nThe port for the printer can be specified using the -p or");
  367.     WScript.echo("the -i the option. The script will first check the port name"); 
  368.     WScript.echo("If it is present, the printer will get that port. "); 
  369.     WScript.echo("If no port is specified, then if an ip address is present,");
  370.     WScript.echo("the script will get the prefered settings of the device and"); 
  371.     WScript.echo("add a tcp port, then the printer using that port.");
  372.     WScript.echo("The script handles the case when the port already exists.");
  373.     WScript.echo("If the device is not responding, a default lpr tcp port will be created.");
  374.  
  375.     if (bExit)
  376.     {
  377.         WScript.quit(1);
  378.     }
  379. }
  380.  
  381. //
  382. // Determines which program is used to run this script. 
  383. // Returns true if the script host is cscript.exe
  384. //
  385. function IsHostCscript()
  386. {
  387.     var strFullName; 
  388.     var strString; 
  389.     var strRight;
  390.     var iLen; 
  391.     var bReturn = false;
  392.     
  393.     try 
  394.     {   
  395.         strFullName = WScript.FullName;
  396.        
  397.         strString = "cscript";
  398.    
  399.         iLen = strString.length;
  400.    
  401.         strRight  = strFullName.substr(strFullName.length - iLen, iLen);
  402.    
  403.         if (strString == strRight.toLowerCase())
  404.         { 
  405.            bReturn = true;
  406.         }
  407.         else 
  408.         {
  409.             strString = "cscript.exe";
  410.    
  411.             iLen = strString.length;
  412.    
  413.             strRight  = strFullName.substr(strFullName.length - iLen, iLen);
  414.        
  415.             if (strString == strRight.toLowerCase())
  416.             {
  417.                bReturn = true;
  418.             }
  419.         }
  420.     }
  421.     catch(Err)
  422.     {
  423.        WScript.echo("Error 0x " + (0xFFFF & Err.number).toString(16) + " occurred. " + 
  424.                     Err.description + ".\nThe scripting host could not be determined");
  425.     }
  426.     
  427.     return bReturn;
  428. }
  429.  
  430.