<%@ Language=VBScript %> <% ' install_printer.asp ' Generates a batch file to install printer(s) ' - If printer has installpath: downloads and runs specific .exe ' - If no installpath: uses PowerShell to install with universal driver ' Usage: install_printer.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 " & _ "FROM printers p " & _ "LEFT JOIN models m ON p.modelid = m.modelnumberid " & _ "LEFT JOIN vendors v ON m.vendorid = v.vendorid " & _ "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 " & _ "FROM printers p " & _ "LEFT JOIN models m ON p.modelid = m.modelnumberid " & _ "LEFT JOIN vendors v ON m.vendorid = v.vendorid " & _ "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 preferred address If printerInfo("fqdn") <> "" And printerInfo("fqdn") <> "USB" Then printerInfo("address") = printerInfo("fqdn") Else printerInfo("address") = printerInfo("ipaddress") End If printers.Add rs("printerwindowsname"), 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) ' Process each printer Dim printerKey, printer For Each printerKey In printers.Keys Set printer = printers(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) If printer("installpath") <> "" Then ' Has specific installer - download and run it 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) Else ' No specific installer - use universal PrinterInstaller.exe Response.Write("echo Using universal printer installer..." & 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=" & printer("standardname") & """" & 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) End If Response.Write("echo." & vbCrLf) Next 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 %>