Use the WshNetwork object to direct users to the right printer
Making the right printer available to the right people in larger networks or in a company in which people move around from system to system can be complicated. Using the same printer all the time doesn't make sense for telecommuters or sales people who use laptops and regularly plug in at different locations. And when several people share a computer or one person uses more than one workstation, you need some way to provide the right printer for the given conditions. A VBScript program can automatically install and connect to printers at user logon according to user or computer identity, then unmap the printer connection when the user logs off. This scenario works best on Windows NTbased OSs such as Windows XP, Windows 2000, and NT because you can create the printer connection and install the drivers in one step. However, you can also use the technique on Windows 9x computers if you've preinstalled drivers.
As I explain in "Connecting Users to Network Resources," June 2002, InstantDoc ID 24893, Windows Script Host (WSH) abstracts the interface of many Win32 objects, including WshNetwork (aka WScript.Network), a collection of network resources, shared drives, and printers. The computer name (ComputerName), username (UserName), and computer domain (UserDomain) are all properties of the WshNetwork object. WshNetwork supports several methods for network access to drives and printers. To map a printer explicitly to a port, you use the AddPrinterConnection method. To create a Windows printer connection (and automatically install the driver on XP, Win2K, or NT), use the AddWindowsPrinterConnection method, which I'll use in the examples in this article. To set the default printer for a computer, use the SetDefaultPrinter method. You can use WshNetwork to install support for shared network printers, and you can use the Select Case statement and InputBox function to build flexibility into the process.
Creating a Generic Printer Connection
Listing 1 shows the simplest way to use VBScript to install a printer. The code in this example
- defines the variables that the script will use (at callout A) so that if you mistype a variable name later in the code, you'll receive an error message instead of creating a new variable.
- creates a connection to the WshNetwork object (at callout B). You must create this connection before you can call on the object's properties and methods.
- assigns the printer's Universal Naming Convention (UNC) path to the sPrintPath variable (at callout C) so that the path is easier to refer to.
- calls the appropriate method to create the printer connection and make it the default, supplyingas an argument to the methodthe variable that represents the printer path (at callout D).
When I assign a valid path in the code at callout C in Listing 1, the script connects to the specified printer if the server is an NT-based computer. To use this script in your environment, simply replace the path in callout C with your valid UNC printer path.
You can use the same script to install support for more than one printer and make one printer the default. To do so, define a separate variable for each printer, assign a separate printer path and call the AddWindowsPrinterConnection method for each variable, and call the SetDefaultPrinter method to set one of the variables as the default printer. (Default printer settings work just as the default printer settings available from the GUI do: If you make more than one printer the default, the script will accept as the default the last printer you specified.)
Creating a Computer- or User-Specific Printer Connection
The script above is a good start, but it isn't all that powerfulyou haven't yet done anything that you can't accomplish with the Net Print command or the Con2prt tool in the Microsoft Windows 2000 Resource Kit. To install printers according to computer or user identity, you need to make the script retrieve the identity and perform actions based on the retrieved data. Listing 2 shows a script that installs printers according to computer identity, so long as the computer you're running the script on has a connection to the print server.
This script first defines the variables and establishes a connection to the WshNetwork object. However, the code that the script introduces in Listing 2 exploits the Select Case statement, which makes this script much more powerful. (For a detailed discussion of the Select Case statement, see "Connecting Users to Network Resources.") Including the Select Case statement permits the script to read the local computer name and make a decision about which printer to install based on that information. The value of the computer name determines the value for sPrintPath, which is then plugged into the AddWindowsPrinterConnection and SetDefaultPrinter methods.