http://www.perlmonks.org?node_id=150133
Category: NT Admin
Author/Contact Info OzzyOsbourne
Description: Checks the Netshield Dats, engines and versions on all of your servers. Create a file called allservers.txt and put your servers in it, one per line.
# Lists version, engine, and dat versions for Netshield servers listed
+ in
# specified infile to the specified outfile.  
# Usage checkdatall.pl [inputfile] [outputfile]
# The input file should be a text file with one server per line
# Simple Help can be obtained with or -?
# Updated on 9.25.01
 
use strict;
use Win32::TieRegistry;

#define variables
my ($dat,$engine,$ver,$infile,$outfile);
if ($ARGV[0]){
  if ($ARGV[0] eq '-?'){die "Usage checkdatall.pl [infile] [outfile]\n
+";}
  $ARGV[0]=~s/\\/\//g;
  $infile=$ARGV[0];
}else{
  $infile='allservers.txt';
}

if ($ARGV[1]){
  $ARGV[1]=~s/\\/\//g;
  $outfile=$ARGV[1];
}else{
  $outfile='checkdatall.log';
}



open (IN,"<$infile") or die "Can't open file for read";
open (OUT,">$outfile") or die "Can't open file for write";
#Read the dat file version
while (<IN>){
    chomp;
    $Registry->Delimiter("/");
    $ver=$Registry->{"//$_/HKEY_LOCAL_MACHINE/Software/Network Associa
+tes/TVD/NetShield NT/CurrentVersion//szProductVer"} or print OUT "Can
+\'t access registry on $_\n";
    $dat=$Registry->{"//$_/HKEY_LOCAL_MACHINE/Software/Network Associa
+tes/TVD/NetShield NT/CurrentVersion//szVirDefVer"} or print OUT "Can\
+'t access registry on $_\n";
    $engine=$Registry->{"//$_/HKEY_LOCAL_MACHINE/Software/Network Asso
+ciates/TVD/NetShield NT/CurrentVersion//szEngineVer"} or print OUT "C
+an\'t access registry on $_\n";
    print OUT "$_\tVersion:$ver\tEngine:$engine\tDat:$dat\n";
    print "$_\tVersion:$ver\tEngine:$engine\tDat:$dat\n";
}
close IN;
close OUT;