Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Win32::TieRegistry and remote machines

by rchiav (Deacon)
on Sep 21, 2001 at 02:00 UTC ( #113716=perlquestion: print w/ replies, xml ) Need Help??
rchiav has asked for the wisdom of the Perl Monks concerning the following question:

I've written a script that is supposed to pull registry values from all machines on a network. The problem I'm having is that whenver it comes across a win9x machine, it won't time out, it just hangs. I attribute this to the fact that there's no user level security implemented on those machines. The fact that I can't pull data from those machines isn't my concern. My concern is that the script won't continue. I've tried to either connect directly like
$Registry->{"//Machine/LMachine/etc"}" ..and... my $RemReg = $Registry->Connect("Machine", "Key to attach to");
All with the same results of hanging on the win9x machines.

I've been over the Win32::TieRegistry docs time and time again and I haven't been able to find anything to fix the problem. The other thing I was exploring was to identify the OS beforehand, but I haven't been successfull in that either(Without WMI anyway).

Any suggestions would be helpful

Rich

Comment on Win32::TieRegistry and remote machines
Download Code
(tye)Re: Win32::TieRegistry and remote machines
by tye (Cardinal) on Sep 21, 2001 at 20:04 UTC

    You can use Win32::NetResource to connect to the machine with a specific username/password before having Win32::TieRegistry call RegConnectRemoteRegistry() which triggers an automatic attempt to connect by trying a few different username/password combinations in succession, which can take quite a while.

    You could also implement your own time out. Doing that reliably with Perl isn't easy, but Win32 makes things worse. I have several ideas how to do this, but "the devil is in the details" and so there isn't one that seems worth fleshing out right now. Though spawning another program in the background and then being able to kill seems likely (super search has several threads on doing that in Win32).

    Let me know what you try and how it works out.

    (I don't think RegConnectRemoteRegistry() supports async operation, but I'll check into that as well.)

            - tye (but my friends call me "Tye")
      Though this is hackish, it's going to suit my needs for now. This something that just needs to get the job done. I'll work more on it later, but for now, this block of code is going to make it work good enough..
      my $enum; eval {$enum = Win32::OLE::Enum->new("WinNT://$comp")}; unless ($enum) { print "$comp is not NT/2000\n"; return; }
      Thanks for the ideas. They got me thinking in a different direction.

      Rich

      Update: *sigh* this doesn't work. Guess I'm trying to get this done too fast. I'll update when it *does* work. Update II:

      Here's what I ended up going with. It's not portable, but pulling registry entries isn't portable anyway. Win32::Process gave me what I needed...

      sub RegConnect { my ($pObj, $ExitCode); my $comp = shift; my $pString = "perl -MWin32::TieRegistry -e " . '"' . '$Registry->Connect(' ."'" . $comp . "', 'LMachine');" . '"'; Win32::Process::Create($pObj, "c:\\perl\\bin\\perl.exe", $pString, 0, NORMAL_PRIORITY_CLASS, ".")|| die "Can't create Perl Process: $!\n"; $pObj->Wait(7000); $pObj->GetExitCode($ExitCode); if ($ExitCode) { $pObj->Kill(1); return 0; } return 1; }
        This may be a bit off... but I was wondering, why not use Win32 module? It has the nice Win32::IsWinNT() and Win32::IsWin95(). I'm making a bit of assumption that Win32::IsWin95() would work with Win98 as well. I'm not sure. Anyways, just a suggestion - it may not fit your needs.

        Good Luck!
        - Moon

        Update: Oops..as usual..assumption.. bad bad! Thanks tye!
Re: Win32::TieRegistry and remote machines
by blakem (Monsignor) on Sep 22, 2001 at 03:46 UTC

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (6)
As of 2014-11-29 07:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (203 votes), past polls