Every Print Server has a hidden file share (called Print$) that is used to deliver print Drivers to Windows clients.
When a PC connects to a Print Share the drivers on the server and client are compared, if the client is missing the driver; or has an older version; then it will be automatically downloaded.
The achilles heel of this system is version control: consider that you have two similar printers on two different print servers. One server has a driver version 26.232 the other has version 26.234, in theory the client will download the latest driver and use it for both printers, in practice the results are less predictable - the worst case being a driver download every time the user prints.
Whenever a new driver is installed on a print server, you can force all users who have a connection to that print queue, to download the updated driver. To force this update, change the Print Share name on the server [Press Apply] Then change back to the original Share Name [Press Apply again].
Change the printer MyPrintShare to MyPrintShareX [Apply] then change back to MyPrintShare.
If you can arrange that each user connects to only one print server, management becomes much easier. If you have multiple print servers, consider duplicating queues so that no user has to access more than one print server.
The Microsoft Print Migrator has now been superseded by PRINTBRM which can backup and restore Print Queues.
To update client printer connections, use qchange this will not only change the clients connection to a different Print Queue but will also also preserve the user's default printer.
List all the print queues currently shared on a server with
net view \\MyServer >file_print_shares.txt
Every shared printer has both a Printer name and a Share name - these appear in different places:
Browsing Network Neighborhood (NetBios UNC Name) = ShareName
Add Printer Wizard (DNS) = PrinterName
Find Printer Wizard (DNS) = PrinterName
Active Directory and the Control Panel will display the PrinterName in most places.
A key difference between these two names is what happens when you rename them:
Changing the ShareName on the server, clients stay connected.
Changing the PrinterName on the server, clients will lose their connection. The control panel status will display "Printer not found on server, unable to connect"
Create Printer called HP1 and share it as Share1
Connect a client to the printer
Now turn off the print Share on the server (set to Not Shared)
Create Printer called KYO2 and share it as Share1, you might expect the client to now connect to this new queue, but it will still point to the old one (and will fail).
Now Rename HP1 to HPold and rename KYO2 (still shared as Share1) to HP1
The client will now connect to Share1 successfully.
As you have probably figured by now; it pays to keep things simple and make the printer's SHARE Name and PRINTER Name identical.
I recommend short printer names (8 characters or less) with no spaces, for example a simple naming convention with 2 characters and a number (AA1, ZZ9...) will support 6,760 print queues. This is likely more than you will want to host on a single Print Server.
Short Printer Names without spaces are portable and easy to script. If you choose to use long names with spaces, expect that some third party software can have problems.
Over time Teams tend to move around different offices and buildings. Over time Printers tend to also move around, either due to maintenance or to satisfy demand. This means that 'meaningful' printer names such as HPLJ14 or FirstFloor21 or FinanceTeam tend to get out-of-date and become unhelpful.
Details such as the printer model and features (colour/duplex etc) should be placed in the Print Queue DESCRIPTION field.
Filling in the LOCATION field will allow the Find Printer Wizard to display all the relevant printers for a team or site.
Attach a large physical label to the printer with it's share name, this will save on paper, user frustration and helpdesk calls.
This feature helps users to find a printer by storing PC and Printer locations in Active Directory.
For example with 500 printers you might define 10 locations with 50 printers in each. Groups of computers are then allocated to appropriate Locations, and Windows will pre-populate the Find Printer Wizard with the 50 nearest printers.
This is a good feature for large organisations following the trend to consolidate multiple print/file servers.
The default Printer connection is per user, and will travel with roaming profiles. it can be changed with Defptr, WMIC or WSH.
If the default printer is a local printer, then roaming to a different PC without an identical local printer, will change the default to the next available printer.
If a local printer is added for All Users and then removed for the current user, it will not be possible to re-add it with the same name, throwing error: “Unable to install printer. Another printer or printers share with this name already exists."
To delete a printer in the registry:
Look for a sub key matching the printer name, and delete it.
- Restart the “Print Spooler“ Service.
In the Printers folder, click Add Printer.
Click My Computer, and then Next.
Click "Local printer attached to this computer"
(don’t tick automatically detect) >Next
Click Create a new Port. >Next
When prompted for a local port name, type a path and file name for the file.
Choose the Generic/Text print driver.
Any PC with a shared local printer will also setup a Print$ share - acting as a source of driver DLL's for other machines. This presents a possible security risk that needs to be understood and managed. If the printer is never accessed by other machines don’t share the printer.
Printer connections are normally per user, and roam with roaming profiles. Local shared printers and roaming profiles are generally not a good mix. (They don’t cause problems but do confuse users who roam.)
It is possible to create printer connections per machine with rundll32 - these will not follow a roaming profile.
Windows workstations will support a maximum of 10 users per Share (This applies to both file and print shares) for more than this you will need a server licence.
Location-aware printing - mobile computers can automatically switch default printer according to the connected network.
Avalon graphics provide improved color printing.
The NextGen print spool file uses human-readable XAML, an XML-based declarative programming language.
This opens up possibilities such as including multiple documents in a single print job.
The Line Printer protocol LPR is a useful method of printing to a character printer, typically used with monospaced fonts for printing over pre-printed stationary such as cheques.
LPR print jobs are sent direct to the printer, this allows the application to manage/send printer control codes, (page feed etc).
LPR can also be used to send print jobs to a UNIX Print Server.
The "Microsoft TCP/IP Printing service (UNIX)" provides a TCP/IP-based printing service using the Line Printer protocol. This is not installed by default.
To create an LPR printer, Select Control Panel - Add Printer - My Computer - Add Port - LPR port.
At the prompt type the host name or IP Address of the printer (or remote Unix host).
Once installed, the LPR protocol will use the Service: LPDSVC
Priority: The priority sliding bar sets the default priority for documents printed.
A common approach is to create one printer for the majority of users with a default priority of 1
then create a separate 'high priority' printer that sends output to the same printing device but with a higher priority setting.
Spool print documents so program finishes printing faster
(& Start printing immediately) - preferred option for most applications.
Print directly to the printer - this sends documents directly to the printer. This gives the fastest time-to-output but you lose the ability to use the PC while the print job is in progress.
Print spooled documents first - if you disable this option, high priority jobs will interrupt lower priority jobs that are already printing. (so the pages get mixed up)
The default Print Processor is WINPRINT.DLL, (this can be replaced for advanced DTP work)
This Print Processor supports several data formats:
Raw: [default] This datatype indicates that the job is in a ready-to-print format in the printing device’s native language. (Good for PostScript printing).
Raw [FF Appended]: As RAW but appends a form-feed character to the end of the print job.
Text: This indicates a print job that consists of ANSI text.
PSCRIPT (PostScript support for Macintosh clients using non-PostScript printer)
EMF: A Windows application will partially rendered the job and the print driver then completes the rendering process. EMF takes advantage of print server CPU resources, EMF files sizes are smaller than RAW which reduces network congestion.
(Good formost PCL-based laser printers)
A printer pool allows multiple physical printing devices to appear as a single'virtual' printer. When print jobs are sent to a printer pool, Windows routes the job to the first availabledevice.
In a busy printing environment pooling will allow more efficent and faster printing but does not provide any failure resilience e.g. Windows cannot redirect a job from a failed port, so when a printer is offline the printer pool will continue to send jobs to that port.
To enable Printer pooling, go to Printer properties - Ports, check the 'Enable printer pooling' tickbox
Note: it's quite possible to have individual print queues in addition to the printer pool queue.
Printing requires the Spooler service to be running
NET PRINT - View and Delete print jobs.
NET SHARE - Create file share.
qchange.vbs - Connect to a different Printer Queue.
PRNCNFG - Configure or rename a printer.
PRNMNGR - Add, delete, list printers and printer connections.
RMTSHARE - List or edit a file share or print share.
RUNDLL32 - Add/remove print connections.
SHARE - List or edit a file share or print share.
WMIC PRINTER - Set printing options through WMI.
Print Management Snap-in - docs.microsoft.com
Q234270 - Group Policies to Control Printers.
Q888744 - Printer driver not updated on the client.
Print Notification - this is set under Control Panel, Printers, File, Server Properties, Advanced.
Equivalent bash command (Linux): printf - Format and print data.