@ECHO OFF
IF [%1] EQU [] (
    ECHO [%DATE% %TIME%] Error: The command line parameter for printer name is missing
    EXIT 87
)

IF [%2] EQU [] (
    ECHO [%DATE% %TIME%] Error: The command line parameter for printer port is missing
    EXIT 87
)

ECHO [%DATE% %TIME%] Info: Printer Name: %1
ECHO [%DATE% %TIME%] Info: Printer Port: %2

ECHO [%DATE% %TIME%] Info: Checking for presence of printing device %1
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\%~1" /v "Printer Driver"
IF NOT %ERRORLEVEL% EQU 0 (
    ECHO [%DATE% %TIME%] Info: Printing device %1 is not present. Nothing to do
    EXIT 0
)

ECHO [%DATE% %TIME%] Info: Printing device is present
ECHO [%DATE% %TIME%] Info: Registering printer port
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports" /v %2 /t REG_SZ /f
IF NOT %ERRORLEVEL% EQU 0 (
    ECHO [%DATE% %TIME%] Fatal: Could not add printer port %2, errorlevel=%ERRORLEVEL%
    EXIT 1603
)

ECHO [%DATE% %TIME%] Info: Restarting print spooler service
NET STOP SPOOLER /YES
NET START SPOOLER

ECHO [%DATE% %TIME%] Info: Redirecting printer port
RUNDLL32.EXE printui.dll,PrintUIEntry /q /Xs /n %1 PortName %2
IF NOT %ERRORLEVEL% EQU 0 (
    ECHO [%DATE% %TIME%] Fatal: Could not redirect printing device %1 to port %2, errorlevel=%ERRORLEVEL%
    EXIT 1603
)

ECHO [%DATE% %TIME%] Info: Restarting print spooler service
NET STOP SPOOLER /YES
NET START SPOOLER

EXIT 0
