The first thing we need to do is determine what systems we want to
push the printers and drivers to. In our example, we’re going to create
a local folder on the C: drive called DEPLOY. Inside the C:\DEPLOY
folder, we create a simple text file with a list of the machines – one
per line. If you’re comfortable with scripting, the odds are that
you’ve used a file like this in your scripting adventures. We save the
file as COMPUTERS.TXT. The file itself looks like this:
Once we have our list of systems, we set it aside and compile our
list of print queues and printer drivers that we want to create on our
target machines. For this, we’re going to create a file called
PRINTUI.CMD in our C:\DEPLOY folder. For each printer or driver we want
to deploy, we create a corresponding line in our PRINTUI.CMD file – for
example:
RUNDLL32 PRINTUI.DLL, PrintUIEntry /ia /f %windir%\inf\ntprint.inf /m “HP LaserJet 4”
Let’s break down this command and look at each piece of it:
RUNDLL32 PRINTUI.DLL, PrintUIEntry /if /f %windir%\inf\ntprint.inf /b “Printer1” /m “HP LaserJet 4” /u /r “LPT1:” /Z
Let’s take a quick look at some of the differences in our syntax:
Getting back to our deployment scenario, we’re going to deploy a locally attached HP LaserJet 4 printer to each of our target machines with the following settings:
Note: The first line is not actually required in our example, but we left it in our example to demonstrate how you can use the command to deploy drivers. The printer driver itself is installed in the second line with the /m switch that looks inside the ntprint.inf file to find the HP LaserJet 4 driver.
Now that we have our list of computers, and we know what the requirements are for the remote machines, we’re ready to use PsExec to carry out our deployment. The syntax for this command is:
PSEXEC @C:\DEPLOY\COMPUTER.TXT –i –n 20 –u DOMAIN\USER –c C:\DEPLOY\PRINTUI.CMD
There are some new pieces of syntax here – let’s examine them:
Finally, PrintUI.DLL commands are flexible and can allow for some odd configurations that are rarely seen. Although it is possible to add per-machine printer connections using the /ga switch, this can result in some unpredictable printing behaviors and is not recommended. And with that, we have reached the end of our post. Thanks for stopping by!
Additional Resources:
COMPUTERNAME1 COMPUTERNAME2 COMPUTERNAME3 etc
RUNDLL32 PRINTUI.DLL, PrintUIEntry /ia /f %windir%\inf\ntprint.inf /m “HP LaserJet 4”
Let’s break down this command and look at each piece of it:
- /ia – install a printer driver using a .inf file
- /f [file] – either .inf file or output file. When adding in-box drivers, use ntprint.inf as in our example above
- /m [model] – printer driver model name. In our example, we’re specifying the HP LaserJet 4
RUNDLL32 PRINTUI.DLL, PrintUIEntry /if /f %windir%\inf\ntprint.inf /b “Printer1” /m “HP LaserJet 4” /u /r “LPT1:” /Z
Let’s take a quick look at some of the differences in our syntax:
- /if – install a printer driver using a .inf file
- /b [name] – base printer name. In our example, we are calling the printer “Printer1”
- /u – use the existing printer driver if it is already installed
- /r [port] – port name – in our case LPT1
- /Z – share the printer. You can only use this switch with the /if option
Getting back to our deployment scenario, we’re going to deploy a locally attached HP LaserJet 4 printer to each of our target machines with the following settings:
- Printer Name = Printer1
- Port = LPT1
- The printer must be shared out
rundll32 printui.dll,PrintUIEntry /ia /f %windir%\inf\ntprint.inf /m "HP LaserJet 4" rundll32 printui.dll PrintUIEntry /if /f %windir%\inf\ntprint.inf /b "Printer1" /m "HP LaserJet 4" /u /r "LPT1:" /Z rundll32 printui.dll,PrintUIEntry /y /n "printer1"
Note: The first line is not actually required in our example, but we left it in our example to demonstrate how you can use the command to deploy drivers. The printer driver itself is installed in the second line with the /m switch that looks inside the ntprint.inf file to find the HP LaserJet 4 driver.
Now that we have our list of computers, and we know what the requirements are for the remote machines, we’re ready to use PsExec to carry out our deployment. The syntax for this command is:
PSEXEC @C:\DEPLOY\COMPUTER.TXT –i –n 20 –u DOMAIN\USER –c C:\DEPLOY\PRINTUI.CMD
There are some new pieces of syntax here – let’s examine them:
- @file – directs PsExec to run the command on each computer listed in the specified text file
- -i – run the program so that it interacts with the desktop of the specified session on the remote system. If no session is specified then the process runs in the console session. We include this option so that we can see any errors the process might generate on the remote system
- -n – specifies the timeout in seconds for remote computer connections
- -u – specifies the user name to use when connecting to the remote system
- -c copies the specified program to the remote system for execution. If you omit this option, the application must be in the system’s path on the remote computer
Finally, PrintUI.DLL commands are flexible and can allow for some odd configurations that are rarely seen. Although it is possible to add per-machine printer connections using the /ga switch, this can result in some unpredictable printing behaviors and is not recommended. And with that, we have reached the end of our post. Thanks for stopping by!
Additional Resources:
No comments:
Post a Comment