Zurück

Lesen der NT4 Registry aus Batchprogramm

Windows NT4 bietet zur Zeit leider keine effiziente Script-Programmiersprache an, welche auf die spezifischen Eigenschaften des Betriebssystems eingeht. Windows Applikationen legen ihre globalen und Umgebungsvariablen in der Regel in der Registry ab. Doch was nützt dies, wenn nicht alle Applikationen auf einfache Weise auf die Registry zugreifen können ?
Perl ist eine der bekanntesten und am meist verbreiteten Scriptsprachen, sie stammt aus dem Unix Umfeld, ist jedoch auch auf Windows (gratis) verfügbar. Die Firma ActiveState hat eine stabile Perl Portierung auf NT4 vorgenommen (siehe: www.activestate.com). Mit Perl ist es ein leichtes auf die Registry zuzugreifen, wie das folgende Beispiel zeigt um die Werte der aktuellen Oracle Installation anzuzeigen.
Der entsprechende Key ist: HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE.

# Purpose:  List Registry Values for specified RegPath

# Include Win32:: Registry Package
use Win32::Registry;

# Set RegistryPath relative to # HKEY_LOCAL_MACHINE
$p = "\\SOFTWARE\\ORACLE";

# Strip leading backslashes
$p =~ s#^\\##;

# Now open the specified RegistryPath $p for
# HKEY_LOCAL_MACHINE. If the Open method succeeds,
# $key will contain the Registry object corresponding
# to the specified key.
$main::HKEY_LOCAL_MACHINE->Open($p, $key) || die "Open: $!";

# GetValues takes a reference to a hash as a parameter
# and populates that hash with all of the values for the
# specified Registry object.
$key->GetValues(\%vals);

# List Key/Value Pairs in the Registry
foreach $k (keys %vals) {
  $key = $vals{$k};
  print "$$key[0] = $$key[2]\n";
}

Output von: perl get_registry.pl

RDBMS80 = D:\Oracle\Product\8.0.5\RDBMS80
RDBMS80_ARCHIVE = D:\Oracle\Product\8.0.5\DATABASE\ARCHIVE
oisfp = D:\Oracle\Product\8.0.5\oisfp10
OO4O = D:\Oracle\Product\8.1.5\OO4O\mesg
oisfp10 = D:\Oracle\Product\8.0.5\oisfp10
EXECUTE_SQL = PLUS80
ORACLE_GROUP_NAME = Oracle for Windows NT
NLSRTL32 = D:\Oracle\Product\8.0.5\NLSRTL32
A2OWIZ80 = D:\Oracle\Product\8.0.5\A2OWIZ80
.............