Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

SysEnvAdd.pl

by RayRay459 (Pilgrim)
on Jul 19, 2001 at 19:52 UTC ( #98120=sourcecode: print w/ replies, xml ) Need Help??

Category: Win32 Stuff
Author/Contact Info Ray Espinoza ray.espinoza@ebay.com
Description: This program will add a System Environment Variable. It will require a reboot to take effect.

#!D:\perl\bin\perl
use strict;

my ($Reg, $Host, $Key, $Value);
use Win32::TieRegistry ( 
    TiedRef => \$Reg, 
    ArrayValues => 1, 
    Delimiter => '/', 
    ':REG_' 
);

# Asking for machine name and info to be added to the sys env var
print "What host would you like to connect to? ";
chomp($Host = <STDIN>);
print "What name would you like for the Sys Environment Variable? ";
chomp($Key = <STDIN>);
print "What value would you like to assign to this variable? ";
chomp($Value = <STDIN>);

# this is the system environment variable area done on the registry
my $SysEnv= $Reg->Connect("$Host", "LMachine/System/CurrentControlSet/
+Control/Session Manager/Environment/") 
    or  die "Can't connect to $Host 's registry or can't open Registry
+ key, Session Manager/Environment: $^E
+\n";

# create a new value and set it's data
$SysEnv->{"/$Key"} = "$Value";

Comment on SysEnvAdd.pl
Download Code
(tye)Re: SysEnvAdd.pl
by tye (Cardinal) on Jul 19, 2001 at 21:28 UTC

    Here are some minor suggestions:

    • Allow the data to be specified on the command line. Having to type the values on separate lines can be inconvenient in some situations.
    • Turn on warnings.
    • Handle EOF (or an error) when reading from STDIN.
    • Environment variables are usually given a value type of REG_EXPAND_SZ (instead of the default REG_SZ that you used) so that they can be, for example, "%SystemRoot%\\system32".
    • Check for failure on the insert.
    Which results in something like this:
    #/usr/bin/perl -w use strict; my $Reg; use Win32::TieRegistry ( TiedRef => \$Reg, ArrayValues => 1, Delimiter => '/', ':REG_' ); my( $Host, $Key, $Value )= @ARGV; # Asking for machine name and info to be added to the sys env var if( ! defined $Host ) { print "What host would you like to connect to? "; $Host= <STDIN> or exit; chomp $Host; } if( ! defined $Key ) { print "What name would you like for the Sys Environment Variable? +"; $Key= <STDIN> or exit; chomp $Key; } if( ! defined $Value ) { print "What value would you like to assign to this variable? "; $Value= <STDIN> or exit; chomp $Value; } # this is the system environment variable area done on the registry my $SysEnv= $Reg->Connect("$Host", "LMachine/System/CurrentControlSet/ +Control/Session Manager/Environment/") or die "Can't connect to $Host 's registry or can't open Registry + key, Session Manager/Environment: $^E +\n"; # create a new value and set its data $SysEnv->{"/$Key"} = [ $Value, REG_EXPAND_SZ ] or die "Can't create $Key ($Value): $^E\n";

            - tye (but my friends call me "Tye")
      thanks tye. you rock!! I am always looking for advice on how to better writing in Perl. ~Ray~

Back to Code Catacombs

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://98120]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (9)
As of 2015-07-04 15:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls