Hack 9 Add, Remove, or Retrieve Environment Variables

figs/moderate.gif figs/hack09.gif

Environment variables can easily be added, removed, or retrieved using the script in this hack.

Using VBScript to work with the Windows system environment can be pretty simple. This hack shows how to use a script to read variables, add new variables, remove variables, and recurse through all of them. Just take a look through the script and read the comments to see how to perform each task. Note that there are four types of values in the Windows Script Host (WSH) environment?System, User, Volatile, and Process?and the script uses all of them.

By the way, this script is provided by Dudeworks (http://www.dudeworks.net). For additional resources on Windows scripting and working with the environment, see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsProEnvironment.asp.

The Code

Type the following script into Notepad (with Word Wrap disabled) and save it with a .vbs extension as GetEnvVars.vbs:

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

'Created by: Rob Olson - Dudeworks 

'Created on: 10/17/2001 

'Purpose: Get Environment Variables. 

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



wscript.echo "Working with the Environment: Provided by www.dudeworks.net"&vbcrlf&vbcrlf&strval 



'// Create an instance of the wshShell object

set WshShell = CreateObject("WScript.Shell")

'Use the methods of the object

wscript.echo "Environment.item: "& WshShell.Environment.item("WINDIR")

wscript.echo "ExpandEnvironmentStrings: "& WshShell.ExpandEnvironmentStrings("%windir%")



'// add and remove environment variables

'// Specify the environment type ( System, User, Volatile, or Process )

set oEnv=WshShell.Environment("System")



wscript.echo "Adding ( TestVar=Windows Script Host ) to the System " _

& "type environment"

' add a var

oEnv("TestVar") = "Windows Script Host"



wscript.echo "removing ( TestVar=Windows Script Host ) from the System " _

& "type environment"

' remove a var

oEnv.Remove "TestVar"





'// List all vars in all environment types



'//System Type

set oEnv=WshShell.Environment("System")

for each sitem in oEnv 

strval=strval & sItem &vbcrlf 

next

wscript.echo "System Environment:"&vbcrlf&vbcrlf&strval 

strval=""



'//Process Type

set oEnv=WshShell.Environment("Process")

for each sitem in oEnv 

strval=strval & sItem &vbcrlf 

next

wscript.echo "Process Environment:"&vbcrlf&vbcrlf&strval 

strval=""



'//User Type

set oEnv=WshShell.Environment("User")

for each sitem in oEnv 

strval=strval & sItem &vbcrlf 

next

wscript.echo "User Environment:"&vbcrlf&vbcrlf&strval 

strval=""



'//Volatile Type

set oEnv=WshShell.Environment("Volatile")

for each sitem in oEnv 

strval=strval & sItem &vbcrlf 

next



wscript.echo "Volatile Environment:"&vbcrlf&vbcrlf&strval 

strval=""

Running the Hack

To run the script, open a command prompt, change to the directory where the script is saved, and type cscript.exe GetEnvVars.vbs. Here is an example of typical output from the script on a Windows 2000 machine:

Microsoft (R) Windows Script Host Version 5.6

Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.



Working with the Environment: Provided by www.dudeworks.net



Environment.item: %SystemRoot%

ExpandEnvironmentStrings: C:\WINNT

Adding ( TestVar=Windows Script Host ) to the System type environment

removing ( TestVar=Windows Script Host ) from the System type environment

System Environment:



ComSpec=%SystemRoot%\system32\cmd.exe

Os2LibPath=%SystemRoot%\system32\os2\dll;

Path=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem

windir=%SystemRoot%

OS=Windows_NT

PROCESSOR_ARCHITECTURE=x86

PROCESSOR_LEVEL=6

PROCESSOR_IDENTIFIER=x86 Family 6 Model 5 Stepping 2, GenuineIntel

PROCESSOR_REVISION=0502

NUMBER_OF_PROCESSORS=1

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

TEMP=%SystemRoot%\TEMP

TMP=%SystemRoot%\TEMP



Process Environment:



=C:=C:\

=ExitCode=00000000

ALLUSERSPROFILE=C:\Documents and Settings\All Users

APPDATA=C:\Documents and Settings\Administrator\Application Data

CommonProgramFiles=C:\Program Files\Common Files

COMPUTERNAME=SNOOPY

ComSpec=C:\WINNT\system32\cmd.exe

HOMEDRIVE=C:

HOMEPATH=\Documents and Settings\Administrator

LOGONSERVER=\\SNOOPY

NUMBER_OF_PROCESSORS=1

OS=Windows_NT

Os2LibPath=C:\WINNT\system32\os2\dll;

Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

PROCESSOR_ARCHITECTURE=x86

PROCESSOR_IDENTIFIER=x86 Family 6 Model 5 Stepping 2, GenuineIntel

PROCESSOR_LEVEL=6

PROCESSOR_REVISION=0502

ProgramFiles=C:\Program Files

PROMPT=$P$G

SystemDrive=C:

SystemRoot=C:\WINNT

TEMP=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp

TMP=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp

USERDOMAIN=SNOOPY

USERNAME=Administrator

USERPROFILE=C:\Documents and Settings\Administrator

windir=C:\WINNT



User Environment:



TEMP=%USERPROFILE%\Local Settings\Temp

TMP=%USERPROFILE%\Local Settings\Temp



Volatile Environment:



LOGONSERVER=\\SNOOPY

APPDATA=C:\Documents and Settings\Administrator\Application Data

By the way, if you add a new variable via the command prompt, you will not see it when you try to read it via the script. You can read only the new values created via the same scripting type you used to create them. Although I've tested this only to a limited extent, it seems to be true. Try it for yourself; just open a command prompt, type Set DUDE=Dudeworks, and press Enter to set the new environment variable. Now, when you execute GetEnvVars.vbs, and you'll notice that it does not list that new variable. However, if you type SET at the command prompt, you will see it.

?Rob Olson