- Chapter 3: Creating Scripts
- Creating Reusable Scripts
- Linking Scripts
- The WSH Object Model
- Summary
Creating Reusable Scripts
One of the greatest benefits that computer programmers have realized in a long time is the capability to create reusable components in their code. This capability has enabled them to build a library of reusable components and code snippets that can be "plugged into" their new or existing projects. This is a great time saver in that the programmer doesn't rewrite a functionality over and over for each project that requires it. WSH enables you to perform the same thing with your script files.
One example of this is the capability to map a network drive. Now, mapping one network drive doesn't seem like a big deal, but what if you had to do it for every login script? Would it make sense to write the same lines of code in every login script? Of course not. Listing 3.2 shows a simple script that is used to map a network drive. You can create this script and save it as MapNetDrive and it will be available whenever you need it. You can also link it into a WSH file with the extension .wsf, and it will be made available to any process that executes that .wsf file. We will create a couple of scripts that can be linked together and then demonstrate how to do this.
Listing 3.2 Script for Mapping a Network Drive Shown in VBScript and JScript
`********************************************************************* ` MapNetDrive.vbs ` This script maps a network drive on the server named celeron500 ` It uses the Boolean value True to indicate a persistent connection ` It also passes the username and password to the server ` ` Author: Gerry O'Brien ` Date: April 7, 2001 ` Platform: Windows 2000/XP ` Language: VBScript `********************************************************************** ` Declare a variable to hold the Wscript.Network object Dim objnet ` Set the object to the variable Set objnet = CreateObject("Wscript.Network") `Map the drive objnet.MapNetworkDrive "S:", "\\celeron500\C","True","gobrien","dianne" //********************************************************************* // MapNetDrive.js // This script maps a network drive on the server named celeron500 // It uses the Boolean value True to indicate a persistent connection // It also passes the username and password to the server // // Author: Gerry O'Brien // Date: April 7, 2001 // Platform: Windows 2000/XP // Language: Jscript //********************************************************************* // Declare a variable to hold the Wscript.Network object var objnet; // Set the object to the variable objnet = new ActiveXObject("WScript.Network"); // Map the network drive objnet.MapNetworkDrive("I:", "\\\\celeron500 _ \\C","True","gobrien","dianne");
Both of these script files will perform the same task. The first step is to declare a variable to hold a reference to the Wscript.Network object. (We will look at the object model a little later in this chapter). Next, we assign the network object to the variable net and then use that variable to execute the MapNetworkDrive method.
This method takes some arguments, as you can see. The first is the drive letter that we want to use for the network drive. It is very important to keep track of the available drive letters so that you don't inadvertently overwrite one that is already in use. If you attempt to use a drive letter that is already assigned, you will receive an error message like that shown in Figure 3.4.
Figure 3.4 The Windows Script Host error message indicating that a drive letter is already in use when executing the MapNetDrive script.
After choosing a drive letter for the mapped drive, we specify the name of the computer or server and the share that we will map to. The last three arguments are optional. The "True" argument is a Boolean argument used to indicate whether the drive should be persistently connected, and the last two arguments are the username and password to use if necessary.
If the script executes with no errors, you will have a mapped network drive displayed in your Explorer or My Computer window, as shown in Figure 3.5.
Now, mapping network drives is not always the only thing you want to do when it comes to dealing with networks and connections. What if you want to add a printer? The code in Listing 3.3 shows how to connect to a network printer.
Figure 3.5 The My Computer window showing the newly mapped network drive with drive letter I.
Listing 3.3 VBScript and JScript for Connecting to a Network Printer
`********************************************************************* ` MapPrinter.vbs ` This script maps a network printer on the server named celeron500 ` It uses the UNC convention for the connection string ` ` Author: Gerry O'Brien ` Date: April 7, 2001 ` Platform: Windows 2000/XP ` Language: VBScript `********************************************************************** Dim objnet Set objnet = CreateObject("WScript.Network") objnet.AddWindowsPrinterConnection \\Celeron500\EPSON //********************************************************************* // MapPrinter.js // This script maps a network printer on the server named celeron500 // It uses the UNC convention for the connection string // // Author: Gerry O'Brien // Date: April 7, 2001 // Platform: Windows 2000/XP // Language: Jscript //********************************************************************* var objnet; objnet = new ActiveXObject("WScript.Network"); objnet.AddWindowsPrinterConnection ("\\\\celeron500\\EPSON");
Once again, either script will work in WSH, and you can choose the language of your choice. This script will add a printer connection to a client machine for a network printer.
NOTE
Although no network administrator I have ever encountered would provide a network printer share on a Windows 9x machine, it's worth noting here that this script will not work for printers shared on Windows 9x computers. The printers must be shared on a Windows NT/2000/XP server.
TIP
Although the previous note indicates that you cannot map to a printer shared on a Windows 9x computer directly, you can add a network printer to a server computer and share it. You can then map to that share as though it exists as a printer connected directly to the server.
Each of the scripts shown here is an actual functioning script that you can use as is or customize to suit your own needs. The main idea here is that you create these and save them for reuse later on. Any time you create a script that you can use over and over again, you have a reusable piece of code that is worth saving.