I figured that I would do a short article on how to do some basic printer management from cmd i Windows.
Overall there are two ways in which to manage printers from the Windows command line (batch scripts). Either using the Printer User Interface, known as PrintUI. Or by using the Windows Management Instrumentation Command or WMIC for short. Obviously using Powershell is also an option (however we wont go into that here).
PrintUI
Is a tool that’s been a part of every Windows version at least since Windows XP – and still Works fine on Windows 10. And it totally looks the same. It allows you to do a million things. You’ll need to load it via rundll32 as such:
1 |
rundll32 printui.dll,PrintUIEntry |
This will give you a complete list of commands to use. You can see them all here by clicking below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
Usage: rundll32 printui.dll,PrintUIEntry [options] [@commandfile] /a[file] binary file name /b[name] base printer name /c[name] unc machine name if the action is on a remote machine /dl delete local printer /dn delete network printer connection /dd delete printer driver /e display printing preferences /f[file] either inf file or output file /F[file] location of an INF file that the INF file specified with /f may depend on /ga add per machine printer connections (the connection will be propagated to the user upon logon) /ge enum per machine printer connections /gd delete per machine printer connections (the connection will be deleted upon user logon) /h[arch] driver architecture one of the following, x86, x64 or Itanium /ia install printer driver using inf file /id install printer driver using add printer driver wizard /if install printer using inf file /ii install printer using add printer wizard with an inf file /il install printer using add printer wizard /im install printer using add printer wizard skiping network listed printers /in add network printer connection /ip install printer using network printer installation wizard /j[provider] print provider name /k print test page to specified printer, cannot be combined with command when installing a printer /l[path] printer driver source path /m[model] printer driver model name /n[name] printer name /o display printer queue view /p display printer properties /q quiet mode, do not display error messages /r[port] port name /s display server properties /Ss Store printer settings into a file /Sr Restore printer settings from a file Store or restore printer settings option flags that must be placed at the end of command: 2 PRINTER_INFO_2 7 PRINTER_INFO_7 c Color Profile d PrinterData s Security descriptor g Global DevMode m Minimal settings u User DevMode r Resolve name conflicts f Force name p Resolve port i Driver name conflict /u use the existing printer driver if it's already installed /t[#] zero based index page to start on /v[version] driver version one of the following, "Type 2 - Kernel Mode" or "Type 3 - User Mode" /w prompt the user for a driver if specified driver is not found in the inf /y set printer as the default /Xg get printer settings /Xs set printer settings /z do not auto share this printer /Y do not auto generate a printer name /K changes the meaning of /h to accept 2, 3, 4 for x86, x64, or Itanium (respectively), and /v to accept 3 for "Type 3 - User Mode" /Z share this printer, can only be used with the /if option /? help this message @[file] command line argument file /Mw[message] show a warning message before committing the command /Mq[message] show a confirmation message before committing the command /W[flags] specifies flags and switches for the wizards (for APW & APDW) r make the wizards to be restart-able from the last page /G[flags] specifies global flags and switches w suppress setup driver warnings UI (super quiet mode) /R force selected driver to replace exisiting driver Examples: Run server properties: rundll32 printui.dll,PrintUIEntry /s /t1 /c\\machine Run printer properties: rundll32 printui.dll,PrintUIEntry /p /n\\machine\printer Run add printer wizard locally: rundll32 printui.dll,PrintUIEntry /il Run add printer wizard on \\machine: rundll32 printui.dll,PrintUIEntry /im /c\\machine Run queue view: rundll32 printui.dll,PrintUIEntry /o /n\\machine\printer Run inf install: rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /f c:\infpath\infFile.inf /r "lpt1:" /m "Brother DCP-128C" Run inf install (with inf dependency). In the example, prnbr002.inf depends on ntprint.inf rundll32 printui.dll, PrintUIEntry /ia /m "Brother DCP-128C" /K /h x64 /v 3 /f "c:\infpath\prnbr002.inf" /F "c:\infpath\ntprint.inf" Run add printer wizard using inf: rundll32 printui.dll,PrintUIEntry /ii /f c:\infpath\infFile.inf Add printer using inbox printer driver: rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /r "lpt1:" /m "Brother DCP-128C" Add per machine printer connection (the connection will be propagated to the user upon logon): rundll32 printui.dll,PrintUIEntry /ga /c\\machine /n\\machine\printer /j"LanMan Print Services" Delete per machine printer connection (the connection will be deleted upon user logon): rundll32 printui.dll,PrintUIEntry /gd /c\\machine /n\\machine\printer 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 "Brother DCP-128C" /h "x86" /v "Type 3 - User Mode" /f c:\infpath\infFile.inf Add printer driver using inf: rundll32 printui.dll,PrintUIEntry /ia /K /c\\machine /m "Brother DCP-128C" /h "x86" /v 3 Add inbox printer driver: rundll32 printui.dll,PrintUIEntry /ia /c\\machine /m "Brother DCP-128C" /h "Intel" /v "Type 3 - Kernel Mode" Remove printer driver: rundll32 printui.dll,PrintUIEntry /dd /c\\machine /m "Brother DCP-128C" /h "x86" /v "Type 3 - User Mode" Remove printer driver: rundll32 printui.dll,PrintUIEntry /dd /K /c\\machine /m "Brother DCP-128C" /h "x86" /v 3 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" 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,PrintUIEntry /Sr /n "printer" /a "file.dat" 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 Enable Client Side Rendering for a printer: rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ClientSideRender enabled Disable Client Side Rendering for a printer: rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ClientSideRender disabled |
A few obviously examples of use would be to install and install a printer from a server. This can be achieved as follows.
1 |
rundll32 printui.dll,PrintUIEntry /in /n \\serveraddr\printername |
1 |
rundll32 printui.dll,PrintUIEntry /dn /n \\serveraddr\printername |
WMIC printer
As mentioned the beginning, you can also use WMIC. The cool thing about WMIC compaired to the alternative above, is that you can add some logic to your actions. For example by removing all network printers in one go…
1 |
wmic printer where "Local='FALSE'" delete |
One important note. This actually only removes printers which are installed as network printer – It DOES NOT remove printers which are network printers, but installed via a local TCP IP port. To remove these you need to specify them separately. This however can be achieved simply by:
1 |
wmic printer where "PortName LIKE 'IP_%%'" delete |
Be carefull with this tough. I have personally, on more then one occasion, managed to remove all printers from a system with a wrongfully conceived WMIC one-liner . Efficient though.