18 Mar 2009
The load balancing feature in Print Distributor seems to create a lot of questions so I thought I would try and explain what it does and does not do in a little more detail.
Load balancing lets you create a pool of printers and spread the print load across the pool automatically.
Printers are selected from the pool sequentially, so the first print goes to the first printer, the next print to the second printer and so on. When every printer has been used it starts back at the first printer again.
You can temporarily remove a printer from the pool by pausing it in Windows, Print Distributor checks the status of each printer before it prints and shrinks the pool accordingly.
Print Distributor will also remove a printer from the pool if it detects it is unavailable. It does this by looking for a print at the front of the queue with an error status or by asking Windows if the printer is available.
Unfortunately Windows cant always tell whether the printer is available, this is dependent on the printer manufacturers software as well as the type of connection. You can check whether your printer reports this by taking your printer off line and looking at the status in the Printers folder in Windows.
If your printers are connected using the standard Windows TCP/IP port then you can often improve the status feedback by enabling SNMP in the port configuration.
I do get asked if it is possible to ping the printer before printing, although we could do this it wouldn’t provide useful feedback in most cases. Any USB attached printers aren’t pingable and if the printer is on another server it is out of reach. Even if it is available a ping won’t tell you if the printer is out of toner or has a fault.
If none of the printers are available in the pool then Print Distributor will spread the load across the whole pool, Windows will queue the prints until the printers are available again.
All jobs are handled individually, they do not get split, so if you print ten copies of a 100 page document then all one thousand pages will go to the next available printer.
The last printer used in the pool is available in the LastPrinter variable in the script action, you could copy this into the PrinterName variable and use the ?PN? field in any other action if you need it.