Environment Variables

Microsoft® Windows® 2000 Scripting Guide

microsoft windows 2000 scripting guide

« Previous | Next »   

Environment variables are a set of string values associated with a process. The Windows Shell process has a number of environment variables associated with it that contain useful information that you can use within your scripts, including:

  • Directories searched by the shell to locate programs (the path).
  • Number of processors, processor manufacturer, and processor architecture of the computer.
  • User profile location.
  • Temporary directory locations.

When a user logs on to Windows, the shell process starts and obtains its initial environment variables by loading both the computer-specific (system) and user-specific (user) environment variables from the registry.

In addition to the computer-specific and user-specific environment variables loaded from the registry, additional process environment variables are generated dynamically during each logon.

Table 3.12 lists a description of each type of environment variable and its location in the registry.

Table 3.12   Types of Environment Variables and Their Storage Locations

TypeDescriptionRegistry Location
UserApplies to the user currently logged on to the computer and is saved between logoffs and restartsHKCU\Environment
SystemApplies to all users of the computer and is saved between logoffs and restartsHKLM\System\CurrentControlSet\Control\Session Manager\Environment
VolatileApplies to current logon session and is not saved between logoffs and restartsHKCU\VolatileEnvironment
ProcessApplies to current process and might be passed to child processesNot stored in the registry

The Environment property of the WshShell object returns a WshEnvironment collection object that gives your scripts the ability to retrieve, create, and modify environment variables. The WshEnvironment collection provides access to all four types of environment variables: system, user, process, and volatile.

Retrieving Environment Variables

To retrieve a collection of environment variables of a specific type, your script must access the WshShell Environment property and provide a string parameter that represents the desired type of environment variable: system, user, process, or volatile. Your script can then use the resulting WshEnvironment collection to access the values of those environment variables by name.

The environment variables that can be retrieved using WSH are shown in Table 3.13.

Table 3.13   WSH Environment Variables

NameSystemUserProcessProcess (Windows 98/Me only)
NUMBER_OF_PROCESSORS
table bullet
 
table bullet
 
PROCESSOR_ARCHITECTURE
table bullet
 
table bullet
 
PROCESSOR_IDENTIFIER
table bullet
 
table bullet
 
PROCESSOR_LEVEL
table bullet
 
table bullet
 
PROCESSOR_REVISION
table bullet
 
table bullet
  
OS
table bullet
 
table bullet
 
COMSPEC
table bullet
 
table bullet
table bullet
HOMEDRIVE  
table bullet
 
HOMEPATH  
table bullet
 
PATH
table bullet
table bullet
table bullet
table bullet
PATHEXT
table bullet
 
table bullet
 
PROMPT  
table bullet
table bullet
SYSTEMDRIVE  
table bullet
 
SYSTEMROOT  
table bullet
 
WINDIR
table bullet
 
table bullet
table bullet
TEMP 
table bullet
table bullet
table bullet
TMP 
table bullet
table bullet
table bullet

The environment variables shown in the preceding table are present on all Windows computers. However, you might also have additional user-specific or computer-specific environment variables, which can also be accessed through a script. If you do not know the names of these variables, you can obtain a complete list of the variables (and their values) by typing set from the command prompt.

The script in Listing 3.22 retrieves both the user-specific and computer-specific PATH environment variables.

Listing 3.22   Displaying User-specific and Computer-specific PATH Environment Variables

1 2 3 4 5 6 7 
Set objShell = WScript.CreateObject("WScript.Shell") Set colSystemEnvVars = objShell.Environment("System") Set colUserEnvVars = objShell.Environment("User") Wscript.Echo "Computer-specific PATH Environment Variable" Wscript.Echo colSystemEnvVars("PATH") Wscript.Echo "User-specific PATH Environment Variable" Wscript.Echo colUserEnvVars("PATH")

When the preceding script runs under CScript, output similar to the following appears in the command window:

Computer-specific PATH Environment Variable %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\system32\WBEM;C:\Program Files\M icrosoft.NET\FrameworkSDK\Bin\;C:\Program Files\Microsoft Visual Studio.NET\Vc7\ bin\;C:\Program Files\Microsoft Visual Studio.NET\Common7\IDE\;C:\WINNT\Microsof t.NET\Framework\v1.0.2914\;C:\Program Files\Microsoft Visual Studio.NET\Vc7\bin\ ;C:\Program Files\Microsoft Visual Studio.NET\Common7\IDE\; C:\MSSQL7\BINN;C:\Program Files\Support Tools\;C:\Program Files\ Resource Kit\C:\PROGRA~1\CA\Common\SCANEN~1;C:\PROGRA~1\CA\eTrust\ANTIVI~1 User-specific PATH Environment Variable C:\Perl\bin;C:\Perl\bin;C:\Perl\bin\ 

Creating Environment Variables

To create a new environment variable, your script must start with the same first step required for retrieving the values of environment variables: It must obtain a reference to a collection of environment variables of one of the four types (user, system, process, or volatile).

After your script has a reference to the collection corresponding to the type of environment variable being created, it can then store a new string value in the corresponding collection location.

Storing the string value creates the new environment variable. The new index becomes the name of the new environment variable, and the corresponding string becomes its initial value. For example, this line of code creates an environment variable named MyVariable, with the initial value 0:

colUsrEnvVars("MyVariable") = 0 

You can write scripts that create process or volatile environment variables, but neither of these types is saved between logons and reboots. You can also create a volatile type, which is stored in the registry and lasts for a logon session; this type of environment variable can be used as a mechanism for communicating information between two scripts that both run during a single logon session. However, you will likely find that creating system or user types is more useful because these environment variables are saved between logon sessions and computer reboots.

The script in Listing 3.23 creates a user environment variable named APP_VARIABLE and sets its initial value to "Installed." The script then retrieves the value of the new APP_VARIABLE environment variable to confirm that it was created.

Listing 3.23   Creating a User-specific Environment Variable

1 2 3 4 
Set objShell = WScript.CreateObject("WScript.Shell") Set colUsrEnvVars = objShell.Environment("USER") colUsrEnvVars("APP_VARIABLE") = "Installed" Wscript.Echo colUsrEnvVars("APP_VARIABLE")

Modifying Environment Variables

To modify an environment variable, your script must use steps similar to those used to create a new environment variable. It must obtain a reference to a collection of environment variables of one of the four types (user, system, process, or volatile) and store that reference in a variable.

After your script has a reference to the collection corresponding to the type of environment variable being modified, it can then reference the name of the environment variable to modify and store a string value in the corresponding collection location, overwriting the string previously located in that location.

The script in Listing 3.24 modifies the value of a user-specific environment variable named APP_VARIABLE by changing the value to Upgraded.

Listing 3.24   Modifying a User-specific Environment Variable

1 2 3 4 5 
Set objShell = WScript.CreateObject("WScript.Shell") Set colUsrEnvVars = objShell.Environment("USER") strCurrentValue = colUsrEnvVars("APP_VARIABLE") colUsrEnvVars("APP_VARIABLE") = "Upgraded" Wscript.Echo colUsrEnvVars("APP_VARIABLE")

Expanding Environment Variables

When constructing environment variables or configuration strings to be used in the registry or elsewhere, you might want to incorporate the current value of an existing environment variable within those variables or strings. For example, if a script needs access to the temporary folder, you need to somehow indicate that, for this user on this computer, the temporary folder can be found in C:\Temp.

However, you would not want to hard-code the value of that environment variable in your configuration string, as it might change in the future and your script would no longer be valid. Although the temporary folder might be C:\Temp today, there is no reason why that cannot be changed to something else (for example, C:\Temporary Folder) tomorrow. Because of that, it is better to use an environment variable to dynamically retrieve the location of the temporary folder rather than hard-coding in the value and hoping that it never changes.

To refer to the value of environment variables within configuration strings, you must use the WshShell ExpandEnvironmentStrings method.

This method accepts, as a parameter, a string with an embedded environment variable name enclosed in percentage symbols (%) and returns a string in which the environment variable name and percentage symbols (%) have been replaced with the value of the corresponding environment variable.

The script in Listing 3.25 shows the difference between echoing the value of an environment variable and echoing the expanded value of an environment variable.

Listing 3.25   Creating and Displaying an Environment Variable That Incorporates Existing Environment Variables

1 2 3 4 5 6 
Set objShell = WScript.CreateObject("WScript.Shell") Set colEnvVars = objShell.Environment("User") Wscript.Echo "Temporary folder (Unexpanded):" Wscript.Echo colEnvVars("TEMP") & vbCrLf Wscript.Echo "Temporary folder (Expanded)" Wscript.Echo objShell.ExpandEnvironmentStrings("%TEMP%")

When run under Cscript, output similar to the following appears in the command window:

Temporary folder (Unexpanded): %USERPROFILE%\Local Settings\Temp Temporary folder (Expanded) C:\DOCUME~1\kmyer\LOCALS~1\Temp 

send us your feedback Send us your feedback « Previous | Next »   


Microsoft Windows 2000 Scripting Guide(c) Automating System Administration 2003
Microsoft Windows 2000 Scripting Guide(c) Automating System Administration 2003
ISBN: N/A
EAN: N/A
Year: 2004
Pages: 635

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net