Command Line Printer Control

Command Line Printer Control
in Windows 2000 / XP
Many, but not all, printer settings can be done from Windows 2000's command line using
The list of functions on this page was generated using the following command in Windows
2000 (Professional):
Notes: (1) I certainly did not test each of these switches myself!
To be honest, I usually prefer to use the (VBScript) printer management
scripts that come with Windows 2000 and later
(2) In Windows 7, PRINTUI.EXE can be used as shorthand for RUNDLL32
More information is available at Microsoft's TechNet under Q189105.
Download Microsoft's PrintUI.DLL User's Guide and Reference for more detailed, task
oriented explanations of command line options.
RUNDLL32 PRINTUI.DLL,PrintUIEntry [ options ] [ @commandfile ]
binary file name
base printer name
unc machine name if the action is on a remote machine
delete local printer
delete network printer connection
delete printer driver
display printing preferences
either inf file or output file
add per machine printer connections
enum per machine printer connections
delete per machine printer connections
driver architecture, one of the following:
Alpha | Intel | Mips | PowerPC
install printer driver using inf file
install printer driver using add printer driver wizard
install printer using inf file
install printer using add printer wizard with an inf file
install printer using add printer wizard
add network printer connection
print provider name
print test page to specified printer, cannot be combined with command
when installing a printer
printer driver source path
printer driver model name
printer name
display printer queue view
display printer properties
quiet mode, do not display error messages
port name
display server properties
Store printer settings into a file
Restore printer settings from a file
Store or restore printer settings option flags that must be placed at the
end of command:
Color Profile
Security descriptor
Global DevMode
Minimal settings
User DevMode
Resolve name conflicts
Force name
Resolve port
use the existing printer driver if it's already installed
zero based index page to start on
driver version, one of the following:
Windows 95 or 98 | Windows NT 3.1 | Windows NT 3.5 or 3.51 |
Windows NT 3.51 | Windows NT 4.0 | Windows NT 4.0 or 2000 |
Windows 2000
prompt the user for a driver if specified driver is not found in the inf
set printer as the default
get printer settings
set printer settings
do not auto share this printer
share this printer, can only be used with the /if option
help this message
command line argument file
Run server properties:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /s /t1 /n\\machine
Run printer properties
Run add printer wizard localy
Run add printer wizard on \\machine
RUNDLL32 PRINTUI.DLL,PrintUIEntry /il /c\\machine
Run queue view
Run inf install
RUNDLL32 PRINTUI.DLL,PrintUIEntry /if /b "Test
Printer" /f %windir%\inf\ntprint.inf /r "lpt1:" /m
"AGFA-AccuSet v52.3"
Run add printer wizard using inf
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ii /f
Add per machine printer connection
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ga /c\\machine
/n\\machine\printer /j"LanMan Print Services"
Delete per machine printer connection
RUNDLL32 PRINTUI.DLL,PrintUIEntry /gd /c\\machine
Enumerate per machine printer connections
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ge /c\\machine
Add printer driver using inf
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ia /c\\machine /m
"AGFA-AccuSet v52.3" /h "Intel" /v "Windows 2000" /f
Remove printer driver
RUNDLL32 PRINTUI.DLL,PrintUIEntry /dd /c\\machine /m
"AGFA-AccuSet v52.3" /h "Intel" /v "Windows 2000"
Set printer as default
RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "printer"
Set printer comment
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xs /n "printer"
comment "My Cool Printer"
Set printer port
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xs /n "printer"
PortName "port:"
Get printer settings
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xg /n "printer"
Get printer settings saving results in a file
RUNDLL32 PRINTUI.DLL,PrintUIEntry /f "results.txt"
/Xg /n "printer"
Set printer settings command usage
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xs /n "printer" ?
Store all printer settings into a file
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Ss /n "printer"
/a "file.dat"
Restore all printer settings from a file
RUNDLL32 PRINTUI.DLL,PrintUI /Sr /n "printer" /a
Store printer information on level 2 into a file
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Ss /n "printer"
/a "file.dat" 2
Restore from a file printer security descriptor
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "printer"
/a "file.dat" s
Restore from a file printer global devmode and printer data
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "printer"
/a "file.dat" g d
Restore from a file minimum settings and resolve port name
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "printer"
/a "file.dat" m p
More to explore:
Microsoft Knowledge Base articles: How to add printers with no user interaction in Windows
XP and How to add printers with no user interaction in Windows (2000/2003).
How to print files from the command line (or batch files).
A tip from Iain Hamilton:
I found this excellent page that gives a LOT of additional functionality to the rundll
command (it's near the bottom of the page).
For example, there are commands for:
changing the sharename for the printer
switching the share on/off
adding comments and location fields to the printer!
Also, I might add: when you're using the /Z switch to auto-share a printer, it truncates the
name to 8 characters. By using the syntax included on this webpage, you can change the
share to be longer than 8. This command is especially useful, since it's cluster-aware.
Thanks Iain
A tip from Denis St-Pierre:
One of the gotchas was that RUNDLL32.exe and PRINTUI.exe always return Errorlevel=0
regardless of errors.
I needed a reliable means to test for the existence of a printer and this is the result:
NOTE: RUNDLL32.exe and PRINTUI.exe always return Errorlevel=0
The trick: Try to get the printer settings into a file
If No file is created = The Printer does not exist
PrinterName=FIT FP-32L Raster
REM Delete %TESTfile% to avoid false positives
DEL %TESTfile% /F /Q
REM Try to get the printer settings into a file
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xg /n "%PrinterName%" /f "%TESTfile%" /q
IF EXIST "%TESTfile%" (
ECHO %PrinterName% printer exists
) ELSE (
ECHO %PrinterName% printer does NOT exists
Thanks Denis
More RUNDLL and RUNDLL32 commands can be found on my RUNDLL page.
An overview of Registry Entries for Printing by Microsoft.
If RUNDLL32 just won't do the
Sometimes we need to do just alittle more than RUNDLL32 is capable of, like installing a
TCP/IP printer port.
In that case, consider buying yourself a copy of the Windows 2000 Server/Windows Server
2003 Resource Kit and use PRNADMIN.DLL and the accompanying sample scripts written in
My own AddIPPrn.bat uses these VBScripts to install a printer, its driver and a TCP/IP
printer port on a remote computer.
If all you need is to
backup/restore, clone or migrate
existing printers:
Often the printer configurations of existing computers need to be cloned to other
computers, or restored after reinstalling Windows.
In those cases, a backup/export and restore/import with Microsoft's PrintMig 3.1 may be the
best (and easiest) solution.
Though earlier versions of PrintMig were GUI only, version 3.1 can also be run without user
interaction from the command line or in a batch file:
Microsoft (R) Windows (TM) Printer Migrator 3.1
Copyright (C) 1997-2002 Microsoft Corp. All rights reserved
usage: PRINTMIG [options] [server]
[-?] Display this message
[-b] Backup - followed by CAB file name
[-r] Restore - followed by CAB file name
[-l] Attempt to convert LPR Ports to SPM
[-i] Suppress warning popups. Info still written to log file.
If server is not specified then the local machine is implied.
Example command line to restore an existing config to a server:
printmig -r d:\print\ \\prt-srvr1
Example command line to backup a server to the specified file:
printmig -b "\\filesrv\store\print server" \\prt-srvr2
PrintMig can be used for Windows (Server) 2000, XP and Server 2003.
For Windows 7 and Windows Server 2008, use the Printer Backup Recovery Migration tool
(PRINTBRM) instead.
PRINTBRM is a great (native) command line tool to backup/restore and migrate printers.
Its command line couldn't be any simpler.
To backup:
%windir%\System32\Spool\Tools\PrintBRM -s \\sourcecomputername -b -f
And to restore:
%windir%\System32\Spool\Tools\PrintBRM -s \\destinationcomputername -r -f
For more help:
%windir%\System32\Spool\Tools\PrintBRM /?
Export printer drivers:
With Microsoft's PrintMig tool you can create backups of your complete set of printers, ports,
drivers, print processors and print monitors.
Unfortunately there is no way to selectively backup nor restore, so you may want to backup
a clean test system with just the printers and components you need to migrate.
If you need to migrate a single printer, use my ExpPrnDr.bat (Export Printer Driver) instead.
It uses Microsoft's DEVCON.EXE to list all files belonging to a specific printer driver, and
PRINTUI.DLL to install that printer driver on any computer.
Download PDF