# SetEnv.pl sets system environment variable via NT registry. # Written 15-oct-1998 by fhb out of frustration with CMD's limits. # Usage: SetEnv varname [value] #require "ctime.pl"; use Win32::Registry; $bDebug = 0; $sAppName = "SetEnv"; $sVersion = "1.0"; if ($bDebug) { print "dbg> ARGV == $#ARGV\n"; } if ($#ARGV < 0) { &usage(); } # here if at least 1 arg, so assume it's env variable: $sItem = $ARGV[0]; $sKeySpec = "SYSTEM\\CurrentControlSet\\control\\Session Manager\\environment"; $key = undef; if ($#ARGV == 0) { $main::HKEY_LOCAL_MACHINE->Open($sKeySpec,$key) || die "Open: $!"; $key->QueryValueEx($sItem,$type,$sVal); $key->Close; if (length($sVal) > 0) { print "$sItem = $sVal\n"; } else { print "$sItem is undefined\n"; } } if ($#ARGV == 1) { $sVal = $ARGV[1]; $main::HKEY_LOCAL_MACHINE->Open($sKeySpec,$key) || die "Open: $!"; ### *** REG_SZ string type hardcoded below! *** ### $key->SetValueEx($sItem,0,REG_SZ,$sVal) || die "SetValueEx: $!"; $key->Close; print "Environment variable $sItem set to $sVal\n"; } exit; ######## subroutines start here: ######### sub usage { print "$sAppName $sVersion: set (or report) a system environment variable.\n"; printf("\nUsage: %s varname [value]\n",$sAppName); printf("\nif [value] omitted, %s reports current value\n",$sAppName); exit; }