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:

                              setprinter -examples 0                              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                              setprinter -examples 1                                SetPrinter does not support the setting of Level 1 values.                              To see current settings:                                SetPrinter -show PrinterName 1                              setprinter -examples 3                              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"                              setprinter -examples 3                              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"                              setprinter -examples 4                              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"                              setprinter -examples 5                              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"                              setprinter -examples 6                              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"                              setprinter -examples 7                              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"                              setprinter -examples 8                              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"                              setprinter -examples 9                              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"