- Remote into each printer and setup a DNS name. Ping the IP and DNS name after making the change. Ensure you allow the printer to take the DNS suffix of the local DHCP server. Use DHCP.
- Download and test the driver that'll be used. Find the correct INF file that has the printer driver name. You'll have to add the printer driver name and driver shared folder location to the printerlist.csv file.
- Label your printers so users know which printer they need to install.
- Create your batch files which start the install process:
@CLS @powershell -command "start-process powershell" -verb runas -argumentlist '-ExecutionPolicy bypass -file \\server\printers\InstallPrinter.ps1 Team12P1'
- @cls clears screen to get rid of extraneous messages while starting script
- @powershell -command "start-process powershell" -verb runas elevates PowerShell to runas Administrator and bypass the UAC settings which can sometimes stop driver installations
- -argumentlist '-ExecutionPolicy bypass -file \\server\printers\InstallPrinter.ps1 Team12P1' bypasses any PS script execution policy setting that may be set on that computer. Then it runs the InstallPrinter.ps1 script and passes the Team12P1 variable to that script so it can look up the printer in the CSV file. Create separate batch files for each printer and change the variable to the DNS name of that printer.
- Create and input printer information into the printerlist.csv file. Here is a sample:
DNSName,DriverShare,DriverINF,DriverName,LastKnownIP,MakeModel,Supplies,Notes Team12P1,\\Team12server\printers\Drivers\HPOJP8630,hpvyt13.inf,HP Officejet Pro 8630,192.168.1.100,HPOJP8630,951XL, Team12P2,\\Team12server\printers\Drivers\HPUniversalPCL5,hpcu180t.inf,HP Universal Printing PCL 5,192.168.1.100,HPLJP400MFP,80X, Team12P3,\\Team12server\printers\Drivers\HPUniversalPCL5,hpcu180t.inf,HP Universal Printing PCL 5,192.168.1.100,HPLJP400MFP,80X, Team12P4,\\Team12server\printers\Drivers\HPUniversalPCL5,hpcu180t.inf,HP Universal Printing PCL 5,192.168.1.100,HPLJP400MFP,80X, Team12P5,\\Team12server\printers\Drivers\HPUniversalPCL5,hpcu180t.inf,HP Universal Printing PCL 5,192.168.1.100,HPLJP4015,64A, Team12P6,\\Team12server\printers\Drivers\HPUniversalPCL5,hpcu180t.inf,HP Universal Printing PCL 5,192.168.1.100,HPLJP4015,64A, Team12P7,\\Team12server\printers\Drivers\HPUniversalPCL5,hpcu180t.inf,HP Universal Printing PCL 5,192.168.1.100,HPLJ600,90A, Team12P8,\\Team12server\printers\Drivers\HPOJP8630,hpvyt13.inf,HP Officejet Pro 8630,192.168.1.100,HPOJP8630,951XL, ,,,,,,, Team12P10,\\Team12server\Printers\Drivers\HPCLJ5520,hpc5520u.inf,HP Color LaserJet CP5520 Series PCL 6,192.168.1.100,HPCLJ5525,650A,USB and WiFi Only Team12L1,\\Team12server\printers\Drivers\HPUniversalPCL5,hpcu180t.inf,HP Universal Printing PCL 5,,HPLJ1102W,85A, Team12L2,,,,,EpsonWF3640,Epson252XL(BCYM),Ordering Manager
- DNSName: Printer name DNS will use to search for an IP
- DriverShare: Printer driver UNC folder location
- DriverINF: Printer driver INF file located at the DriverShare location
- DriverName: Exact printer name found within the Driver INF file
- LastKnownIP: Static IP used to create a port when the printer and laptop are on different networks. You will have to create a new IP Port when the laptop is on the same network as the printer.
- MakeModel: Not used in scripts but for your reference
- Supplies: Not used in scripts but place to note what print cartridges each printer needs
- Notes: Not used in scripts but provides general information
- Create the InstallPrinter.ps1 file referenced in the initial printer installation batch file. Here is the script I use:
#No 32-bit support $DNSName = $args $printerlist = import-csv \\server\printers\installscripts\printerlist.csv|? DNSName -eq $DNSName $DriverShare = $printerlist.drivershare $DriverINF = $printerlist.driverinf $DriverName = $printerlist.drivername $LastKnownIP = $printerlist.lastknownIP $IP = $LastKnownIP #Checking for old version of printer, then deleting it so new version can be added if ((gwmi win32_service|? name -match spool|select -expand state) -eq 'Stopped'){start-service spooler} if ((gwmi win32_printer|select -expand name) -contains $DNSName){ #This will remove any spooled jobs then delete the printer with the old IP address if ((gwmi win32_service|? name -match spool|select -expand state) -eq 'running'){stop-service spooler} remove-item c:\windows\system32\spool\printers\*.* -force do {sleep 1}until((gwmi win32_service|? name -match spool|select -expand state) -eq 'Stopped') start-service spooler sleep 5 $settings = gwmi win32_printer|? name -eq $DNSName|select * write-host "`nDeleting old printer installation`n" cscript c:\windows\system32\printing_admin_scripts\en-us\prnmngr.vbs -d -p $DNSName $Oldport = $settings.portname write-host "`nDeleting old Port: $Oldport`n" -f blue $portmsg = cscript c:\windows\system32\printing_admin_scripts\en-us\prnport.vbs -d -r $Oldport $d = cscript c:\windows\system32\printing_admin_scripts\en-us\prndrvr.vbs -x } write-host ("Printer: " + $DNSName)-f green if ($IP.count -gt 0){write-host ("IP address: " + $IP)-f green}else{write-host ("No Active IP, using last known IP: " + $IP)-f red} write-host ("`n$DNSName will be available once this window disappears (approx. 3 minutes).`n") -f yellow $delprinters = cscript c:\windows\system32\printing_admin_scripts\en-us\prndrvr.vbs -x cscript c:\windows\system32\printing_admin_scripts\en-us\prndrvr.vbs -a -m $DriverName -h $DriverShare -i ($DriverShare + "\" + $DriverINF) cscript c:\windows\system32\printing_admin_scripts\en-us\prnport.vbs -a -r $IP -h $IP -o raw -n 9100 #rundll32 printui.dll,PrintUIEntry /if /b $DNSName /r $IP /m $DriverName cscript c:\windows\system32\printing_admin_scripts\en-us\prnmngr.vbs -a -p $DNSName -m $DriverName -r $IP if ((gwmi win32_printer|select -expand name) -contains $DNSName){write-host "`n$DNSName installed correctly!" -f green;sleep 5}
Now you have a generic printer installation process that you can easily alter when you need to update IPs, Printer Names, or Printer Driver information. As long as you've renamed your printers DNS names correctly, they should be found on any network subnet you share. Also, the printerlist.csv file is easy to load into Excel and use for other things besides your installation scripts.
Last note: In my scenario, I have this system connected to a Box account so all changes are backed up to the cloud and I can update these files from the cloud outside the local subnet/network.