use strict; use Win32::Registry; use vars qw/%data @source @target @missing/; if ($HKEY_LOCAL_MACHINE->Connect($ARGV[0], my $root)) { print "\nSuccessfully connect to remote registry on $ARGV[0]\n"; if ($root->Open("System\\CurrentControlSet\\Control\\Print", my $Key)) { print "Obtaining printer information....Please wait\n"; my @keys; $Key->GetKeys( \@keys ); print "\nListing printers found on source machine\n"; print "\n-------------------------------------------------------------\n"; for my $subkey ( @keys ) { print "\n\nSubKey : $subkey\n"; $Key->Open( $subkey, my $x ) or die $^E; my %vals; my @vals; $x->GetKeys( \@vals ); for my $item (@vals) { next if ($item !~ /^,,My_print_server01/); print "Items within : $item\n"; regDelTree($item, "HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Print\\Printers\\") } } $Key->Close; } } else { die"FATAL ERROR : NO SOURCE MACHINE $ARGV[0], $^E\n"; } sub regDelTree { my $rootKey= shift @_; # Reg key to del subtree from my $keyName= shift @_; # Name of key to delete { my $key= $rootKey->{$keyName}; if( ! $key ) { warn "Can't open $keyName in ", $rootKey->Path(), ": $^E\n"; return; } for( $key->SubKeyNames() ) { regDelTree( $key, "$_\\" ); } } delete $rootKey->{$keyName} or warn "Can't delete $keyName from ", $rootKey->Path(), ": $^E\n"; }