Batch universal installer printers into single call

Instead of calling PrinterInstaller.exe separately for each printer
(which opened multiple GUI wizards), now collects all printers without
specific installers and passes them comma-separated in one call.

- Specific installers still run individually with /SILENT
- Universal installer printers batched: /PRINTER=Name1,Name2,Name3

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
cproudlock
2025-12-08 13:10:59 -05:00
parent 97683e9b1a
commit c5fd338441

View File

@@ -195,10 +195,29 @@ Else
Response.Write("echo Installing " & printers.Count & " printer(s)..." & vbCrLf) Response.Write("echo Installing " & printers.Count & " printer(s)..." & vbCrLf)
Response.Write("echo." & vbCrLf) Response.Write("echo." & vbCrLf)
' Process each printer ' 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 printerKey, printer
Dim specificInstallers, universalPrinters, universalNames
Set specificInstallers = Server.CreateObject("Scripting.Dictionary")
Set universalPrinters = Server.CreateObject("Scripting.Dictionary")
universalNames = ""
For Each printerKey In printers.Keys For Each printerKey In printers.Keys
Set printer = printers(printerKey) Set printer = printers(printerKey)
If printer("installpath") <> "" Then
specificInstallers.Add printerKey, printer
Else
universalPrinters.Add printerKey, printer
If universalNames <> "" Then universalNames = universalNames & ","
universalNames = universalNames & printer("standardname")
End If
Next
' Process printers with specific installers first (silent mode)
For Each printerKey In specificInstallers.Keys
Set printer = specificInstallers(printerKey)
Response.Write("" & vbCrLf) Response.Write("" & vbCrLf)
Response.Write("echo ----------------------------------------" & vbCrLf) Response.Write("echo ----------------------------------------" & vbCrLf)
@@ -213,8 +232,6 @@ Else
Response.Write("echo ----------------------------------------" & vbCrLf) Response.Write("echo ----------------------------------------" & 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("echo Downloading specific installer..." & vbCrLf)
Response.Write("powershell -NoProfile -Command """ & _ Response.Write("powershell -NoProfile -Command """ & _
"$ProgressPreference = 'SilentlyContinue'; " & _ "$ProgressPreference = 'SilentlyContinue'; " & _
@@ -228,9 +245,21 @@ Else
Response.Write(") else (" & vbCrLf) Response.Write(") else (" & vbCrLf)
Response.Write(" echo ERROR: Could not download installer" & vbCrLf) Response.Write(" echo ERROR: Could not download installer" & vbCrLf)
Response.Write(")" & vbCrLf) Response.Write(")" & vbCrLf)
Else Response.Write("echo." & vbCrLf)
' No specific installer - use universal PrinterInstaller.exe Next
Response.Write("echo Using universal printer installer..." & vbCrLf)
' 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." & vbCrLf)
Response.Write("echo Downloading PrinterInstaller.exe..." & vbCrLf) Response.Write("echo Downloading PrinterInstaller.exe..." & vbCrLf)
Response.Write("powershell -NoProfile -Command """ & _ Response.Write("powershell -NoProfile -Command """ & _
@@ -240,15 +269,13 @@ Else
"-OutFile '%TEMP%\PrinterInstaller.exe' -UseBasicParsing -UseDefaultCredentials""" & vbCrLf) "-OutFile '%TEMP%\PrinterInstaller.exe' -UseBasicParsing -UseDefaultCredentials""" & vbCrLf)
Response.Write("if exist ""%TEMP%\PrinterInstaller.exe"" (" & vbCrLf) Response.Write("if exist ""%TEMP%\PrinterInstaller.exe"" (" & vbCrLf)
Response.Write(" echo Running installer..." & vbCrLf) Response.Write(" echo Running installer..." & vbCrLf)
Response.Write(" ""%TEMP%\PrinterInstaller.exe"" ""/PRINTER=" & printer("standardname") & """" & vbCrLf) Response.Write(" ""%TEMP%\PrinterInstaller.exe"" ""/PRINTER=" & universalNames & """" & vbCrLf)
Response.Write(" del ""%TEMP%\PrinterInstaller.exe"" 2>nul" & vbCrLf) Response.Write(" del ""%TEMP%\PrinterInstaller.exe"" 2>nul" & vbCrLf)
Response.Write(") else (" & vbCrLf) Response.Write(") else (" & vbCrLf)
Response.Write(" echo ERROR: Could not download PrinterInstaller.exe" & vbCrLf) Response.Write(" echo ERROR: Could not download PrinterInstaller.exe" & vbCrLf)
Response.Write(")" & vbCrLf) Response.Write(")" & vbCrLf)
End If
Response.Write("echo." & vbCrLf) Response.Write("echo." & vbCrLf)
Next End If
Response.Write("" & vbCrLf) Response.Write("" & vbCrLf)
Response.Write("echo ========================================" & vbCrLf) Response.Write("echo ========================================" & vbCrLf)