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." & 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 specificInstallers, universalPrinters, universalNames
Set specificInstallers = Server.CreateObject("Scripting.Dictionary")
Set universalPrinters = Server.CreateObject("Scripting.Dictionary")
universalNames = ""
For Each printerKey In printers.Keys
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("echo ----------------------------------------" & vbCrLf)
@@ -213,8 +232,6 @@ Else
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'; " & _
@@ -228,9 +245,21 @@ Else
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)
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 """ & _
@@ -240,15 +269,13 @@ Else
"-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(" ""%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)
End If
Response.Write("echo." & vbCrLf)
Next
End If
Response.Write("" & vbCrLf)
Response.Write("echo ========================================" & vbCrLf)