Skip navigation

JSI Tip 9458. How can I add a network printer remotely, so that it is available to all users?

In tip 2014 » Windows 2000 can add local and remote printers from the command line, I described the rundll32 printui.dll,PrintUIEntry command.

When you type rundll32 printui.dll,PrintUIEntry /?, you see:

The /ga switch adds the printer to all users who log onto the target computer.

I have scripted NetworkPrinter.bat to add a network printer to all users who log on to the target computer.

The syntax for using NetworkPrinter.bat is:

NetworkPrinter \\Workstation \\Server\PrinterShare

Where \\Workstation is the remote (or local) target computer, and \\Server\PrinterShare is the network printer.

NOTE: NetworkPrinter.bat uses sc.exe and reg.exe, built into Windows XP, Windows Server 2003, and later, or installed on Windows 2000 from the Resource Kit and the Support Tools on the Windows 2000 CD-ROM.

NetworkPrinter.bat contains:

@echo off
if \{%2\}==\{\} @echo Syntax: NetworkPrinter \\Workstation \\Server\PrinterShare&goto :EOF 
setlocal ENABLEDELAYEDEXPANSION
set ws=%1
set prt=%2
set work="%TEMP%\Network_Printer_%RANDOM%.TMP"
if exist %work% del /q %work%
:: Locate any services that depend on the Spooler service.
set key=HKLM\SYSTEM\CurrentControlSet\Services
for /f "Tokens=*" %%a in ('reg query %ws%\%key%^|FIND "HKEY_LOCAL_MACHINE"') Do (
 set svc=%%a
 set svc=%ws%\!svc:*\SYSTEM=HKLM\SYSTEM!
 call :quiet2 "!svc!">nul 2>&1
)
call :quiet1>nul 2>&1
if exist %work% del /q %work%
endlocal
goto :EOF
:quiet1
rundll32 printui.dll,PrintUIEntry /ga /c%ws% /n%prt%
if not exist %work% goto ss1
:: Stop dependent services
for /f "Tokens=*" %%a in ('type %work%') do (
 sc %ws% stop "%%a"
)
:: Wait 6 seconds
@ping -n 7 127.0.0.1>nul
:ss1
sc %ws% stop spooler
@ping -n 7 127.0.0.1>nul
sc %ws% start spooler
if not exist %work% goto :EOF
@ping -n 7 127.0.0.1>nul
:: Start dependent services
for /f "Tokens=*" %%a in ('type %work%') do (
 sc %ws% start "%%a"
)
goto :EOF
:quiet2
set OK=N
for /f "Tokens=*" %%b in ('reg query %1^|Findstr /i /c:"DependOnService"^|find /i "Spooler\"') do (
 set OK=Y
)
if "%OK%" EQU "N" goto :EOF
set dos=%1
set dos=%dos:"=%
call set dos=%%dos:%ws%=%%
set dos=%dos:\HKLM\SYSTEM\CurrentControlSet\Services\=%
@echo %dos%>>%work%



Hide comments

Comments

  • Allowed HTML tags: <em> <strong> <blockquote> <br> <p>

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
Publish