Download SetPrinter.exe, a command-line tool to set configurations or states of local and remote printers, for an individual printer or for all printers on a print server.

SetPrinter uses the following general syntax:setprinter \[/show\] \{\\server | \\server\printer | printer\} \{printer_info_level\} \[keyword="\[- | +\]value" ...\] \[\{pause | resume | purge | setstatus\}\] setprinter \{/help | /examples\} \{printer_info_level\}When you open a CMD.EXE windows and type setprinter /?, you receive:

Syntax:  SetPrinter <\\server|printer> <level> \[<data> ...\] \[<cmd>\]
     or  SetPrinter -help <level>
     or  SetPrinter -examples <level>
     or  SetPrinter -show <\\server|printer> <level>
where:
  \\server : change all local printers on this server ("" for local machine)
  printer  : change this printer (printer or \\server\printer)
  level    : PRINTER_INFO level (0 - 9).
  data     : (optional) Level specific data in 'keyword=value keyword=value'
              format.  Data is unchanged for keywords not specified.
  cmd      : (optional, but must be last if present) one of:
               "pause", "resume", "purge", "setstatus"

  -help    : show format of data for <level>
  -examples: show usage examples for <level>
  -show    : show current settings (no changes applied)
printer_info_level Specifies the printer information level. The valid values are 0 though 9. The printer information level is part of the SetPrinter application programming interface (API).
Level Structure
0 If the Command parameter is PRINTER_CONTROL_SET_STATUS, pPrinter must contain a DWORD value that specifies the new printer status to set. For a list of the possible status values, see the Status member of the PRINTER_INFO_2 structure. Note that PRINTER_STATUS_PAUSED and PRINTER_STATUS_PENDING_DELETION are not valid status values to set.

If Level is 0, but the Command parameter is not PRINTER_CONTROL_SET_STATUS, pPrinter must be NULL.

2 A PRINTER_INFO_2 structure containing detailed information about the printer.
3 Windows NT/2000/XP: A PRINTER_INFO_3 structure containing the printer's security information.
4 Windows NT/2000/XP: A PRINTER_INFO_4 structure containing minimal printer information, including the name of the printer, the name of the server, and whether the printer is remote or local.
5 A PRINTER_INFO_5 structure containing printer information such as printer attributes and time-out settings.
6 Windows 2000/XP: A PRINTER_INFO_6 structure specifying the status value of a printer.
7 Windows 2000/XP: A PRINTER_INFO_7 structure. The dwAction member of this structure indicates whether SetPrinter should publish, unpublish, re-publish, or update the printer's data in the directory service.
8 Windows 2000/XP: A PRINTER_INFO_8 structure specifying the global default printer settings.
9 Windows 2000/XP: A PRINTER_INFO_9 structure specifying the per-user default printer settings.

Examples:

<b>setprinter -examples 0</b>
Used to pause, resume, or purge (all jobs from) a print queue.

To see current settings:
  SetPrinter -show PrinterName 0

To pause a printer:
  SetPrinter PrinterName 0 pause

To resume a printer:
  SetPrinter PrinterName 0 resume

To delete all jobs from all printers on the local machine:
  SetPrinter "" 0 purge

To indicate all printers on a remote machine are not available:
  SetPrinter \\ServerName 0 "status=|notavailable" setstatus

To indicate all printers on a remote machine are no longer offline:
  SetPrinter \\ServerName 0 "status=|~offline" setstatus


<b>setprinter -examples 1</b>

  SetPrinter does not support the setting of Level 1 values.

To see current settings:
  SetPrinter -show PrinterName 1


<b>setprinter -examples 3</b>

Used to configure most print queue settings.

To see current settings:
  SetPrinter -show PrinterName 2

To share a printer:
  SetPrinter PrinterName 2 "pShareName=ShareName" "Attributes=+shared"

To unshare a printer:
  SetPrinter PrinterName 2 "Attributes=|~shared"

To change a printer name:
  SetPrinter PrinterName 2 "pPrinterName=New name"

To make a pooled printer (one queue, multiple ports):
  SetPrinter PrinterName 2 "pPortName=LPT1,LPT2,IP_10.0.0.0"

To set all printers on the local machine to spool RAW only,keep printed jobs,
and print spooled jobs first:
  SetPrinter "" 2 "Attributes=|rawonly keepjobs docompletefirst"

To enable long-side duplex printing and collation on all printers on a remote
machine (dmFields settings are optional since they are implicitly set):
  SetPrinter \\ServerName 2 "pdevmode=dmduplex=2,dmCollate=1,dmFields=|duplex collate"

To set default paper size to A4 on all local printers:
(for current user.  Use level 8 to set global default)
  SetPrinter "" 2 "pdevmode=dmPaperSize=9, dmPaperLength=2970, dmPaperWidth=2100, dmFormName=A4"


<b>setprinter -examples 3</b>

Used to set print queue security.  Note: Security settings can only be set as a whole.  No
support is provided for partial modifications.

To see current settings:
  SetPrinter -show PrinterName 3

To change security settings (see "Security Descriptor String Format" in MSDN or SDKdocs for details):
*** WARNING: this could make the print queue inaccessable and require the use of a registry editor to fix ***
SetPrinter PrinterName 3 "pSecurityDescriptor=O:BAG:DUD:(A;CIIO;RC;;;CO)(A;OIIO;GA;;;CO)(A;;SWRC;;;WD)(A;CIIO;GX;;;WD)(A;;LCSWSDRCWDWO;;;BA)(A;OICIIO;GA;;;BA)(A;;LCSWSDRCWDWO;;;PU)(A;OICIIO;GA;;;PU)"
To leave the settings unchanged (but what's the point then):
  SetPrinter PrinterName 3 "pSecurityDescriptor=NULL"


<b>setprinter -examples 4</b>

Not often used since level 2 has this and more control (but is slower).

To see current settings:
  SetPrinter -show PrinterName 4

To change a printer name:
  SetPrinter PrinterName 4 "pPrinterName=newname"

To unshare a printer:
  SetPrinter PrinterName 4 "Attributes=|~shared"


<b>setprinter -examples 5</b>

Used primarily to change timeout values for LPT ports.

To see current settings:
  SetPrinter -show PrinterName 5

To set retry timeout to 15 minutes (900 seconds):
  SetPrinter PrinterName 5 "TransmissionRetryTimeout=900"

To change a printer name:
  SetPrinter PrinterName 5 "pPrinterName=newname"

To change a print queue's port:
  SetPrinter PrinterName 5 "pPortName=NewPortName"


<b>setprinter -examples 6</b>


Used to set a print queue's status.  Same as level 0 with SetStatus command.

To see current settings:
  SetPrinter -show PrinterName 6

To indicate a printer is not available:
  SetPrinter PrinterName 6 "dwstatus=|notavailable"

To indicate all printers on a remote machine are no longer offline:
  SetPrinter \\ServerName 6 "dwstatus=|~offline"


<b>setprinter -examples 7</b>


Used to publish or unpublish a printer in the ActiveDirectory.

To see current settings:
  SetPrinter -show PrinterName 7

To publish a printer:
  SetPrinter PrinterName 7 "dwAction=publish"

To unpublish all printers on the local machine:
  SetPrinter "" 7 "dwAction=unpublish"

To republish all printers on a remote machine:
  SetPrinter \\ServerName 7 "dwAction=republish"


<b>setprinter -examples 8</b>


Used to set global document printing defaults.

To see current settings:
  SetPrinter -show PrinterName 8

To disable collation on a printer:
  SetPrinter PrinterName 8 "pdevmode=dmCollate=0"

To enable long-side duplex printing and collation on all printers on a remote
machine (dmFields settings are optional since they are implicitly set):
  SetPrinter \\ServerName 8 "pdevmode=dmduplex=2,dmCollate=1,dmFields=|duplex collate"

To set default paper size to A4 on all local printers:
  SetPrinter "" 8 "pdevmode=dmPaperSize=9, dmPaperLength=2970, dmPaperWidth=2100, dmFormName=A4"


<b>setprinter -examples 9</b>

Used to set current-user document printing defaults.  Not really useful for
 remote servers/printers since there is no associated current user.

To see current settings:
  SetPrinter -show PrinterName 9

To disable collation on a printer:
  SetPrinter PrinterName 9 "pdevmode=dmCollate=0"

To enable long-side duplex printing and collation on all printers
(dmFields settings are optional since they are implicitly set):
  SetPrinter "" 9 "pdevmode=dmduplex=2,dmCollate=1,dmFields=|duplex collate"

To set default paper size to A4 on all local printers:
  SetPrinter "" 9 "pdevmode=dmPaperSize=9, dmPaperLength=2970, dmPaperWidth=2100, dmFormName=A4"