Files
shopdb/installprinter.asp
cproudlock 249bfbba8c Standardize ASP filenames: remove underscores
Renamed 45 ASP files to follow lowercase concatenated naming convention:
- Direct handlers: save_machine_direct.asp -> savemachinedirect.asp
- USB files: checkin_usb.asp -> checkinusb.asp
- API files: api_usb.asp -> apiusb.asp
- Map files: network_map.asp -> networkmap.asp
- Printer files: printer_lookup.asp -> printerlookup.asp

Also:
- Updated 84+ internal references across all ASP and JS files
- Deleted 6 test/duplicate files (editmacine.asp, test_*.asp)
- Updated production migration guide with filename changes
- Added rename scripts for Linux (bash) and Windows (PowerShell)
2025-12-10 20:40:05 -05:00

313 lines
14 KiB
Plaintext

<%@ Language=VBScript %>
<!--#include file="./includes/sql.asp"-->
<%
' installprinter.asp
' Generates a batch file to install printer(s)
' - If printer has installpath: downloads and runs specific .exe
' - If no installpath: downloads universal PrinterInstaller.exe
' Usage: installprinter.asp?printer=GuardDesk-HIDDTC
Dim printerNames, printerIds, printerArray, i, fileName
printerNames = Request.QueryString("printer")
printerIds = Request.QueryString("printerid")
' Sanitize printer names
If printerNames <> "" Then
printerNames = Replace(printerNames, """", "")
printerNames = Replace(printerNames, "&", "")
printerNames = Replace(printerNames, "|", "")
printerNames = Replace(printerNames, "<", "")
printerNames = Replace(printerNames, ">", "")
End If
' Query database for printer info
Dim strSQL, rs, printers
Set printers = Server.CreateObject("Scripting.Dictionary")
If printerIds <> "" Then
' Query by printer ID (preferred - handles printers with duplicate names)
printerArray = Split(printerIds, ",")
strSQL = "SELECT p.printerid, p.printerwindowsname, p.printercsfname, " & _
"p.fqdn, p.ipaddress, p.installpath, " & _
"v.vendor, m.modelnumber, ma.alias, ma.machinenumber " & _
"FROM printers p " & _
"LEFT JOIN models m ON p.modelid = m.modelnumberid " & _
"LEFT JOIN vendors v ON m.vendorid = v.vendorid " & _
"LEFT JOIN machines ma ON p.machineid = ma.machineid " & _
"WHERE p.printerid IN ("
For i = 0 To UBound(printerArray)
If i > 0 Then strSQL = strSQL & ","
strSQL = strSQL & CLng(Trim(printerArray(i)))
Next
strSQL = strSQL & ")"
ElseIf printerNames <> "" Then
' Query by printer name (legacy support)
printerArray = Split(printerNames, ",")
strSQL = "SELECT p.printerid, p.printerwindowsname, p.printercsfname, " & _
"p.fqdn, p.ipaddress, p.installpath, " & _
"v.vendor, m.modelnumber, ma.alias, ma.machinenumber " & _
"FROM printers p " & _
"LEFT JOIN models m ON p.modelid = m.modelnumberid " & _
"LEFT JOIN vendors v ON m.vendorid = v.vendorid " & _
"LEFT JOIN machines ma ON p.machineid = ma.machineid " & _
"WHERE p.printerwindowsname IN ("
For i = 0 To UBound(printerArray)
If i > 0 Then strSQL = strSQL & ","
strSQL = strSQL & "'" & Replace(Trim(printerArray(i)), "'", "''") & "'"
Next
strSQL = strSQL & ")"
End If
If printerIds <> "" Or printerNames <> "" Then
Set rs = objConn.Execute(strSQL)
While Not rs.EOF
Dim printerInfo
Set printerInfo = Server.CreateObject("Scripting.Dictionary")
printerInfo("name") = rs("printerwindowsname") & ""
printerInfo("csfname") = rs("printercsfname") & ""
printerInfo("fqdn") = rs("fqdn") & ""
printerInfo("ipaddress") = rs("ipaddress") & ""
printerInfo("installpath") = rs("installpath") & ""
printerInfo("vendor") = rs("vendor") & ""
printerInfo("model") = rs("modelnumber") & ""
' Determine printer name to use
' Prefer Windows Name from database if it's already in standardized format (contains dashes)
' Otherwise generate standardized name (same logic as apiprinters.asp)
Dim machineAlias, machineNumber, machineName, cleanMachine, cleanModel, shortDescription, standardName
' Check if printerwindowsname is already standardized (contains dashes, not just spaces)
If InStr(printerInfo("name"), "-") > 0 Then
' Use database Windows Name as-is (user manually set it)
standardName = printerInfo("name")
Else
' Generate standardized name
machineAlias = rs("alias") & ""
machineNumber = rs("machinenumber") & ""
If machineAlias <> "" Then
machineName = machineAlias
Else
machineName = machineNumber
End If
cleanMachine = Replace(machineName, " ", "")
cleanMachine = Replace(cleanMachine, "Machine", "")
cleanModel = Replace(printerInfo("model"), " ", "")
' Extract short description from model number
If InStr(cleanModel, "ColorLaserJet") > 0 Then
shortDescription = "ColorLaserJet"
ElseIf InStr(cleanModel, "LaserJetPro") > 0 Then
shortDescription = "LaserJetPro"
ElseIf InStr(cleanModel, "LaserJet") > 0 Then
shortDescription = "LaserJet"
ElseIf InStr(cleanModel, "Altalink") > 0 Then
shortDescription = "Altalink"
ElseIf InStr(cleanModel, "Versalink") > 0 Then
shortDescription = "Versalink"
ElseIf InStr(cleanModel, "DesignJet") > 0 Then
shortDescription = "DesignJet"
ElseIf InStr(cleanModel, "DTC") > 0 Then
shortDescription = "DTC"
Else
Dim j, char2
shortDescription = ""
For j = 1 To Len(cleanModel)
char2 = Mid(cleanModel, j, 1)
If char2 >= "0" And char2 <= "9" Then
Exit For
End If
shortDescription = shortDescription & char2
Next
If shortDescription = "" Then
shortDescription = cleanModel
End If
End If
' Build standard name: CSFName-Location-VendorModel
If printerInfo("csfname") <> "" And printerInfo("csfname") <> "NONE" And printerInfo("csfname") <> "gage lab " Then
If cleanMachine <> "" And LCase(printerInfo("csfname")) <> LCase(cleanMachine) Then
standardName = printerInfo("csfname") & "-" & cleanMachine & "-" & printerInfo("vendor") & shortDescription
Else
standardName = printerInfo("csfname") & "-" & printerInfo("vendor") & shortDescription
End If
Else
If cleanMachine <> "" Then
standardName = cleanMachine & "-" & printerInfo("vendor") & shortDescription
Else
standardName = "Printer" & rs("printerid") & "-" & printerInfo("vendor") & shortDescription
End If
End If
End If
printerInfo("standardname") = standardName
' Determine preferred address
If printerInfo("fqdn") <> "" And printerInfo("fqdn") <> "USB" Then
printerInfo("address") = printerInfo("fqdn")
Else
printerInfo("address") = printerInfo("ipaddress")
End If
printers.Add CStr(rs("printerid")), printerInfo
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
End If
' Generate filename
If printers.Count = 0 Then
fileName = "Install_Printers.bat"
ElseIf printers.Count = 1 Then
fileName = "Install_" & printers.Items()(0)("name") & ".bat"
Else
fileName = "Install_" & printers.Count & "_Printers.bat"
End If
' Set headers
Response.ContentType = "application/bat"
Response.AddHeader "Content-Type", "application/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename=" & fileName
' Generate batch file
Response.Write("@echo off" & vbCrLf)
Response.Write("setlocal enabledelayedexpansion" & vbCrLf)
Response.Write("" & vbCrLf)
Response.Write("echo ========================================" & vbCrLf)
Response.Write("echo GE Aerospace Printer Installer" & vbCrLf)
Response.Write("echo ========================================" & vbCrLf)
Response.Write("echo." & vbCrLf)
If printers.Count = 0 Then
Response.Write("echo No printers specified" & vbCrLf)
Response.Write("pause" & vbCrLf)
Response.Write("exit /b 1" & vbCrLf)
Else
Response.Write("echo Installing " & printers.Count & " printer(s)..." & vbCrLf)
Response.Write("echo." & vbCrLf)
' Separate printers into two groups:
' 1. Those with specific installers (run individually with /SILENT)
' 2. Those using universal installer (batch into one call)
Dim printerKey, printer
Dim specificInstallers, universalPrinters, universalNames
Set specificInstallers = Server.CreateObject("Scripting.Dictionary")
Set universalPrinters = Server.CreateObject("Scripting.Dictionary")
universalNames = ""
' HP and Xerox use universal installer, others need specific installers
Dim skippedPrinters
Set skippedPrinters = Server.CreateObject("Scripting.Dictionary")
For Each printerKey In printers.Keys
Set printer = printers(printerKey)
If printer("vendor") = "HP" Or printer("vendor") = "Xerox" Then
universalPrinters.Add printerKey, printer
If universalNames <> "" Then universalNames = universalNames & ","
universalNames = universalNames & printer("standardname")
ElseIf printer("installpath") <> "" Then
specificInstallers.Add printerKey, printer
Else
skippedPrinters.Add printerKey, printer
End If
Next
' Warn about printers that can't be installed
If skippedPrinters.Count > 0 Then
Response.Write("echo." & vbCrLf)
Response.Write("echo *** WARNING: The following printers require manual installation ***" & vbCrLf)
For Each printerKey In skippedPrinters.Keys
Set printer = skippedPrinters(printerKey)
Response.Write("echo - " & printer("standardname") & " (" & printer("vendor") & ")" & vbCrLf)
Next
Response.Write("echo." & vbCrLf)
End If
' Process non-HP/Xerox printers with specific installers (e.g., HID card printers)
For Each printerKey In specificInstallers.Keys
Set printer = specificInstallers(printerKey)
Response.Write("" & vbCrLf)
Response.Write("echo ----------------------------------------" & vbCrLf)
Response.Write("echo Installing: " & printer("name") & vbCrLf)
If printer("csfname") <> "" Then
Response.Write("echo CSF Name: " & printer("csfname") & vbCrLf)
End If
Response.Write("echo Model: " & printer("model") & vbCrLf)
Response.Write("echo Address: " & printer("address") & vbCrLf)
Response.Write("echo ----------------------------------------" & vbCrLf)
Response.Write("echo." & vbCrLf)
Response.Write("echo Downloading specific installer..." & vbCrLf)
Response.Write("powershell -NoProfile -Command """ & _
"$ProgressPreference = 'SilentlyContinue'; " & _
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; " & _
"Invoke-WebRequest -Uri 'https://tsgwp00525.rd.ds.ge.com/shopdb/" & printer("installpath") & "' " & _
"-OutFile '%TEMP%\printer_installer.exe' -UseBasicParsing -UseDefaultCredentials""" & vbCrLf)
Response.Write("if exist ""%TEMP%\printer_installer.exe"" (" & vbCrLf)
Response.Write(" echo Running installer..." & vbCrLf)
Response.Write(" ""%TEMP%\printer_installer.exe"" /SILENT" & vbCrLf)
Response.Write(" del ""%TEMP%\printer_installer.exe"" 2>nul" & vbCrLf)
Response.Write(") else (" & vbCrLf)
Response.Write(" echo ERROR: Could not download installer" & vbCrLf)
Response.Write(")" & vbCrLf)
Response.Write("echo." & vbCrLf)
Next
' Process universal installer printers (single call with all printer names)
If universalPrinters.Count > 0 Then
Response.Write("" & vbCrLf)
Response.Write("echo ----------------------------------------" & vbCrLf)
Response.Write("echo Installing " & universalPrinters.Count & " printer(s) via Universal Installer:" & vbCrLf)
For Each printerKey In universalPrinters.Keys
Set printer = universalPrinters(printerKey)
Response.Write("echo - " & printer("name") & vbCrLf)
Next
Response.Write("echo ----------------------------------------" & vbCrLf)
Response.Write("echo." & vbCrLf)
Response.Write("echo Downloading PrinterInstaller.exe..." & vbCrLf)
Response.Write("powershell -NoProfile -Command """ & _
"$ProgressPreference = 'SilentlyContinue'; " & _
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; " & _
"Invoke-WebRequest -Uri 'https://tsgwp00525.rd.ds.ge.com/shopdb/installers/PrinterInstaller.exe' " & _
"-OutFile '%TEMP%\PrinterInstaller.exe' -UseBasicParsing -UseDefaultCredentials""" & vbCrLf)
Response.Write("if exist ""%TEMP%\PrinterInstaller.exe"" (" & vbCrLf)
Response.Write(" echo Running installer..." & vbCrLf)
Response.Write(" ""%TEMP%\PrinterInstaller.exe"" /PRINTER=""" & universalNames & """" & vbCrLf)
Response.Write(" del ""%TEMP%\PrinterInstaller.exe"" 2>nul" & vbCrLf)
Response.Write(") else (" & vbCrLf)
Response.Write(" echo ERROR: Could not download PrinterInstaller.exe" & vbCrLf)
Response.Write(")" & vbCrLf)
Response.Write("echo." & vbCrLf)
End If
Response.Write("" & vbCrLf)
Response.Write("echo ========================================" & vbCrLf)
Response.Write("echo Installation Complete!" & vbCrLf)
Response.Write("echo ========================================" & vbCrLf)
Response.Write("echo." & vbCrLf)
Response.Write("pause" & vbCrLf)
End If
Response.Write("" & vbCrLf)
Response.Write(":: Self-delete this batch file" & vbCrLf)
Response.Write("(goto) 2>nul & del ""%~f0""" & vbCrLf)
' Cleanup
objConn.Close
Set objConn = Nothing
%>