Best Practice for deploying 100+ Printers/Copiers

RLim945
New Contributor III

We have over 100+ Printers/Copiers at all of our sites. Before having jamf pro, we would keep a spreadsheet with all IPs and add them manually. Now that we have jamf pro, we're unsure how to best set all these printers up in jamf. Should we build a policy for each printer or is there a better way? The reason why we're hesitating is because we can imagine how long of a list our Policies page would be, filled with all of our printers. Also, when adding the printers using Casper admin, it automatically checks "shared this printer on your network." Should we use a script or use files and processes instead of using Casper admin to upload the printer?

Thanks!

6 REPLIES 6

marklamont
Contributor III

firstly if the printers are in specific locations with distinct subnets you can import the subnets and scope the printers to install/uninstall, or show in self service, based up on the devices subnet.

secondly script the printer install using lpadmin, a few options go a long way. to turn off sharing is

-o printer-is-shared=false

a couple of examples using a xerox, the first uses a variable to include the users AD account

/usr/sbin/lpadmin -p FollowMe -E -v lpd://$prUser@printing.int.corp.com/FollowMe -P '/Library/Printers/PPDs/Contents/Resources/Xerox AltaLink C8045.gz' -D 'FollowMe' -o printer-is-shared=false -o XROutputColor=PrintAsGrayscale -o XRFinisher=BRFinisher

and the second uses the logged in users AD creds, on an AD bound machine, to send the job.

/usr/sbin/lpadmin -p FollowMe -E -v smb://printing.int.corp.com/FollowMe -P '/Library/Printers/PPDs/Contents/Resources/Xerox AltaLink C8045.gz' -D 'FollowMe' -o printer-is-shared=false -o XROutputColor=PrintAsGrayscale -o XRFinisher=BRFinisher -o auth-info-required=negotiate

mahughe
Contributor

Printer Logic is the best printing solution to come along in a very long time. Using Casper admin and policies is very cumbersome and PL is very cost friendly.

sam_g
Contributor
Contributor

In our environment, we do have a policy for each printer. It's kind of ugly and makes the policy page super long in JAMF, but it allows us to have individual scoping to each printer and better control. We've also moved from using Casper Admin to "install" and deploy the printers since that does not include print drivers. Instead, we avoid using the built in printer option at all and instead in each policy we now cache the print driver for the printer in question, and then install it via command line using lpadmin. This allows us to customize trays, finishers, description, etc. if desired.

dsavageED
Contributor III

We have a policy for each building or floor depending on the size of the building, each of these policies has duplicate scripts to add each printer for the given area (our jss has add-printer1 - 16), these are made available to the user via self service. I'd suggest you don't want a policy for each printer, so finding a way to group them is a good idea, you also probably want to create a printers category so you can minimise them...

For our script see - https://github.com/UoE-macOS/jss/blob/master/coreconfig-add-printer.sh

mahughe
Contributor

Printer logic installs drivers, and can be set to push out..or use in a self service mode..you can bind it to AD, and leverage that. It can be set to only show the printers on that network segment. Cross platform as well..forget all of the scripting and stuff for printers. It updates drivers, IP's, etc on the fly if needed. Very clean, easily to use and setup.

stevewood
Honored Contributor II
Honored Contributor II

I'm in much the same boat. We have 5 main business units with sub-agencies under each of them. Total location count, just for North America could reach upwards of 100 or more, and most of those locations have at least 10 printers. So we could be looking at thousands of printers in our JPS by the time we finish our global rollout.

I'm looking at @haircut printer installer: self-service-printer-installer

Or coming up with some other method to present all printers for a location via one policy for that location without grouping printers into that group install as @dsavageED mentioned. I hate making users install all 20 printers for a location/floor when they only need one or two.

I was able to overcome the multiple scripts for each printer issue by using a "case" statement in a Bash script. Using parameter 4 of a policy, I can use the same "add-printers.sh" script to add multiple printers via policy. You create one policy for each printer, attach the script, and then put the printer name in Parameter 4:

#!/bin/bash

# Name: AddPrinters.sh
# Date: 31 Oct 2017
# Author: Steve Wood (steve.wood@omnicomgroup.com)
# Purpose: add printers using a Case statement to choose

# setup logging
logFile="/var/log/addprinters.log"

# Check for / create logFile
# thanks to Dan Snelson for this method
if [ ! -f "${logFile}" ]; then
    # logFile not found; Create logFile
    /usr/bin/touch "${logFile}"
fi

function ScriptLog() { # Re-direct logging to the log file ...

    exec 3>&1 4>&2        # Save standard output and standard error
    exec 1>>"${logFile}"    # Redirect standard output to logFile
    exec 2>>"${logFile}"    # Redirect standard error to logFile

    NOW=`date '+%Y-%m-%d %H:%M:%S'`
    /bin/echo "${NOW}" " ${1}" >> ${logFile}

}
ScriptLog

lpa='/usr/sbin/lpadmin'

echo $4 ${NOW}

case "$4" in
Printer1)
    lpadmin -p Printer1 -E -o printer-is-shared=false -v lpd://1.1.1.1 -P "/Library/Printers/PPDs/Contents/Resources/Xerox Phaser 7760GX.gz"
    ;;
Printer2)
    lpadmin -p Printer2 -E -o printer-is-shared=false -v lpd://1.1.1.2 -P "/Library/Printers/PPDs/Contents/Resources/en.lproj/Xerox EX C60-C70 Printer"
    ;;
Printer3)
    lpadmin -p Printer3 -E -o printer-is-shared=false -v lpd://1.1.1.3 -P "/Library/Printers/PPDs/Contents/Resources/Xerox Phaser 7800GX.gz"
    ;;
Printer4)
    lpadmin -p Printer4 -E -o printer-is-shared=false -v lpd://1.1.1.4 -P "/Library/Printers/PPDs/Contents/Resources/en.lproj/Xerox EX C60-C70 Printer"
    ;;
esac