//******************************************************************
// JScript - H+H NetMan for Schools
// (c) 2007 H+H Software GmbH, Göttingen
// 
// Connects and disconnects printers - v3.3.0.0
//******************************************************************

var objArguments = WScript.Arguments; 
var cLogFile     = "";
var ForWriting   = 2;               // Schreiben
var ForAppending = 8;               // Anhängen
var cText        = "";
var nArguments   = objArguments.length;
var nStart       = 0;

if (nArguments < 1)
{              
  cText += "H+H NetMan for Schools JScript Con2Prt.js, v3.3.0.0\n";
  cText += "(c) 2007, All rights reserved\n\n";
  cText += "Usage: Con2Prt.js <Printer|/d>\n";
  WScript.Echo(cText);
}
else
{
  var objNetwork  = WScript.CreateObject("WScript.Network");
  var objPrinters = objNetwork.EnumPrinterConnections();    
  var strText     = "";  
  var nError      = 0;

  for (var i = 0; i<= objPrinters.length-2; i=i+2)
  {
    // strText = strText + objPrinters(i) + "    " + objPrinters(i+1) + "\n";
    // WScript.Echo(objPrinters(i+1));
    try
    {
      objNetwork.RemovePrinterConnection(objPrinters(i+1),true,true);
    }
    catch(e)
    {
      if (e != 0)
      {
        // no error message - there may be a local printer
        // WScript.Echo("Error while disconnecting a printer connection - " + objPrinters(i+1));
      }
    }

  } 

  var cPrinterList = objArguments(0);
  var acPrinter    = cPrinterList.split("|",5);
  var nPrinters    = acPrinter.length; 
  // WScript.Echo(cPrinterList);
  if (cPrinterList.toUpperCase() != "/D") 
  {
    var strMsg = "";
    for (var i = nStart; i < nPrinters; i++)
    {
      // WScript.Echo(acPrinter[i]);
      try
      {
        objNetwork.AddWindowsPrinterConnection(acPrinter[i])
        if (i == 0)
        {
           objNetwork.SetDefaultPrinter(acPrinter[0]);
        }
      }
      catch(e)
      {
        if (e != 0)
        {
          // WScript.Echo(e)          
          var nError   = e.number & 0xFFFF;
          var strError = "Unbekannter Fehler";
          switch(nError)
          {
            case  1801: strError = "Der Druckername ist ungültig";break
            case  1797: strError = "Der Druckertreiber ist nicht installiert";break
            case  1726: strError = "Der Remote-Prozeduraufruf ist gescheitert.";break
            case  1722: strError = "Der RPC-Server ist nicht verfügbar.";break
            case  1260: strError = "Windows kann dieses Programm nicht öffnen, weil dies einer Systemrichtlinie zufolge nicht zulässig ist.";break
            case   462: strError = "Remote Server existiert nicht oder steht nicht zur Verfügung.";break 
            case   123: strError = "Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.";break
            case    70: strError = "Zugriff wurde verweigert.";break
            case     2: strError = "Die angegebene Datei wurde nicht gefunden."
            default:    strError = "Fehlernummer des Betriebssystems"
          }
          /*
          {
            case  1801: strError = "The printer name is invalid.";break
            case  1797: strError = "The printer driver is unknown.";break
            case  1726: strError = "The remote procedure call failed.";break
            case  1722: strError = "The RPC server is unavailable.";break
            case  1260: strError = "Windows cannot open this program because it has been prevented by a software restriction policy.";break
            case   462: strError = "Remote Server machine does not exist or unavailable.";break 
            case   123: strError = "The filename, directory name, or volume label syntax is incorrect.";break
            case    70: strError = "Access denied.";break
            case     2: strError = "The system cannot find the file specified."
            default:    strError = "Error number of the operating system"
          }
          */

          // WScript.Echo(e.description + " Fehlernummer: " + nError);

          /*
             Error message 123 is commonly associated with attempting to create a printer on a print server
             where the target printer already exists (the print server itself). This may be the domain controller
             for instance. As the printer are available this error is not worth to report it.
             Error number 9 is usually reported when connecting a HP printer (2300 or 2100). Though this error 
             was reported the connection was successfully established. 
          */

          if ((nError != 123) && (nError != 9)) 
            strMsg   = strMsg + " " + acPrinter[i];
        }
      }
    }
    if (strMsg != "")
    {
      var objNMEnv      = WScript.CreateObject("NMEnv.HHComEnv");
      var objWShell     = WScript.CreateObject("WScript.Shell");
      var objOSEnv      = objWShell.Environment("Process");
      var strComputer   = objOSEnv("ComputerName");
      var strErrorDescr = nError +": " + strError;
      strMsg            = "Fehler beim Verbinden von " + strMsg + " auf " + strComputer
      var bRC           = objNMEnv.HHEnvSet("NFS-Error", strMsg);
      var bRC           = objNMEnv.HHEnvSet("ErrorDescription", strErrorDescr);
      // WScript.Echo(strMsg);
    }
  }
}
WScript.Quit(0);

