# regWins.pl adds registry entries for primary & secondary WINS server addresses. # Calls the following external commands: RCMD, REG. # Written 28-Jan-1998 by fhb. # Usage: regWins computername | filename # # filename file must contain a list of computer names. # Lines beginning with a '!' are ignored as comments. # $bDebug = 0; $sKey = "HKLM\\System\\CurrentControlSet\\Services\\NetBT\\Adapters"; $sTempFile = "t.t"; $sAddr1 = "192.168.117.53"; $sAddr2 = "192.168.233.22"; $nTotal = 0; MAIN: $sAppName = "regWins"; $sVersion = "0.1"; print "$sAppName $sVersion\n"; $sFile = $ARGV[0]; if (!$sFile) { die "No computername or filename supplied.\n"; } if (open(FDATA,$sFile)) { while () { if (!/^\!/) { # skip comments chop; s/\s(.*)//; # remove whitespace s/^\\\\//; # remove leading '\\' $sComputer = $_; &ModRegistry(); } } } else { # arg not a file, so try single computer: $sComputer = $ARGV[0]; &ModRegistry(); } if ($nTotal > 1) { print "$sAppName: modified WINS for $nTotal workstations.\n"; } if ($nTotal == 1) { print "$sAppName: modified WINS for $sComputer.\n"; } if ($nTotal < 1) { print "$sAppName: no modifications made.\n"; } ##### We all live in a yellow subroutine... ##### sub ModRegistry { # Format computer name as UNC (preceed with "\\"): $_ = $sComputer; s/\\+//; # remove any leading backslashes $sComputer = "\\\\" . $_; # prepend 2 backslashes # Capture REG QUERY output in temp file to get adapter type: $sCmd = sprintf("reg query %s %s >%s",$sKey,$sComputer,$sTempFile); if ($bDebug) { print "dbg> $sCmd\n"; } system($sCmd); open(FTEMP,$sTempFile) || print "Can't open file $sTempFile: $!\n"; while () { chop $_; if ($bDebug) { print "dbg> line=$_\n"; } if (/^\[E(.*)/) { $sAdapter = substr($_,1); chop $sAdapter; last; } } close(FTEMP); if ($bDebug == 0) { unlink $sTempFile; } if ($sAdapter eq "") { die "Can't find network adapter for $sComputer!\n"; } $sKeyItem1 = sprintf("%s\\%s\\NameServer",$sKey,$sAdapter); $sKeyItem2 = sprintf("%s\\%s\\NameServerBackup",$sKey,$sAdapter); $sCmd = sprintf("reg delete %s %s /F",$sKeyItem1,$sComputer); if ($bDebug) { print "dbg> $sCmd\n"; } else { print "removing old server 1 on $sComputer...\n"; system($sCmd); } $sCmd = sprintf("reg add %s=%s %s",$sKeyItem1,$sAddr1,$sComputer); if ($bDebug) { print "dbg> $sCmd\n"; } else { print "adding new server 1 to $sComputer...\n"; system($sCmd); } $sCmd = sprintf("reg delete %s %s /f",$sKeyItem2,$sComputer); if ($bDebug) { print "dbg> $sCmd\n"; } else { print "removing old server 2 on $sComputer...\n"; system($sCmd); } $sCmd = sprintf("reg add %s=%s %s",$sKeyItem2,$sAddr2,$sComputer); if ($bDebug) { print "dbg> $sCmd\n"; } else { print "adding new server 2 to $sComputer...\n"; system($sCmd); } ++$nTotal; }