Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > Kicking off multiple processes at once instead of waiting....

Reply
Thread Tools

Kicking off multiple processes at once instead of waiting....

 
 
Simon
Guest
Posts: n/a
 
      06-29-2007
Hi guys hope you can help.

I have the following script which connects to remote machines and returns
information about the values of certain registry keys.
All is good, but the way the script runs is that it does this....
Connects to first machine.......returns data
Then connects to next machine....returns data
Then the next
Then the next and so on.

What Id like to be able to do, because we have so many machines to process,
is to do the following...

Connect to, say 10 machines all at the same time, then return data back to
the one main console (where I executed the script in the first place),
instead of waiting for 1 machine to end, then move on to the next.

Any help greatly appreciated. Here is the script.

================================================== =============== Script

use Win32;
use Win32::Registry;

sub RunRegQuery {

$p = 'Software\Network Associates\TVD\VirusScan Enterprise\CurrentVersion';
Win32::RegOpenKeyEx(&HKEY_LOCAL_MACHINE,$p,&NULL,&
KEY_QUERY_VALUE|&KEY_SET_VALUE,$hkey);
Win32::RegQueryValueEx($hkey,"szVirDefVer",&NULL,$ type,$Definition);
Win32::RegQueryValueEx($hkey,"szProductVer",&NULL, $type,$Product);
Win32::RegQueryValueEx($hkey,"szEngineVer",&NULL,$ type,$Engine);

print "$SystemName\n";
print "$Definition\n";
print "$Product\n";
print "$Engine\n";
print " \n";
}

##########
## MAIN ##
##########

open (Store, "< llsystems.txt") or die "can't open systems.txt: $!";
foreach $line (<Store>)
{
chomp($line);
$SystemName = $line;
if ($SystemName =~ /^l/i) {
system ("net use \\\\$SystemName\\ipc\$ "password"
/user:$SystemName\\useraccount > NUL");
sleep 3;
RunRegQuery();
system ("net use \\\\$SystemName\\ipc\$ /delete /y > 2NUL > NUL"); # Delete
previous connection
}
else {
print "not a valid system\n";
}
}
close (Store);
exit;

================================================== ================= End of
script

Output is as follows..

C:\>script.pl
Lcomputer1
5060
8.0.0.912
5100
Lcomputer2
5060
8.0.0.912
5100
Lcomputer3
5060
8.0.0.912
5100

etc etc

Any help greatly appreciated guys, thank you.

S


 
Reply With Quote
 
 
 
 
QoS@domain.invalid
Guest
Posts: n/a
 
      06-29-2007

"Simon" <(E-Mail Removed)> wrote in message-id: <zY_gi.458$(E-Mail Removed)>

>
> Hi guys hope you can help.
>
> I have the following script which connects to remote machines and returns
> information about the values of certain registry keys.
> All is good, but the way the script runs is that it does this....
> Connects to first machine.......returns data
> Then connects to next machine....returns data
> Then the next
> Then the next and so on.
>
> What Id like to be able to do, because we have so many machines to process,
> is to do the following...
>
> Connect to, say 10 machines all at the same time, then return data back to
> the one main console (where I executed the script in the first place),
> instead of waiting for 1 machine to end, then move on to the next.
>
> Any help greatly appreciated. Here is the script.
>
> ================================================== =============== Script
>
> use Win32;
> use Win32::Registry;
>
> sub RunRegQuery {
>
> $p = 'Software\Network Associates\TVD\VirusScan Enterprise\CurrentVersion';
> Win32::RegOpenKeyEx(&HKEY_LOCAL_MACHINE,$p,&NULL,&
> KEY_QUERY_VALUE|&KEY_SET_VALUE,$hkey);
> Win32::RegQueryValueEx($hkey,"szVirDefVer",&NULL,$ type,$Definition);
> Win32::RegQueryValueEx($hkey,"szProductVer",&NULL, $type,$Product);
> Win32::RegQueryValueEx($hkey,"szEngineVer",&NULL,$ type,$Engine);
>
> print "$SystemName\n";
> print "$Definition\n";
> print "$Product\n";
> print "$Engine\n";
> print " \n";
> }
>
> ##########
> ## MAIN ##
> ##########
>
> open (Store, "< llsystems.txt") or die "can't open systems.txt: $!";
> foreach $line (<Store>)
> {
> chomp($line);
> $SystemName = $line;
> if ($SystemName =~ /^l/i) {
> system ("net use \\\\$SystemName\\ipc\$ "password"
> /user:$SystemName\\useraccount > NUL");
> sleep 3;
> RunRegQuery();
> system ("net use \\\\$SystemName\\ipc\$ /delete /y > 2NUL > NUL"); # Delete
> previous connection
> }
> else {
> print "not a valid system\n";
> }
> }
> close (Store);
> exit;
>
> ================================================== ================= End of
> script
>
> Output is as follows..
>
> C:\>script.pl
> Lcomputer1
> 5060
> 8.0.0.912
> 5100
> Lcomputer2
> 5060
> 8.0.0.912
> 5100
> Lcomputer3
> 5060
> 8.0.0.912
> 5100
>
> etc etc
>
> Any help greatly appreciated guys, thank you.
>
> S


Just use Threads

 
Reply With Quote
 
 
 
 
Simon
Guest
Posts: n/a
 
      06-29-2007
Hi QoS,

Thanks for your input.

Do you mean the module Threads?


<(E-Mail Removed)> wrote in message news:qr%gi.5424$ss5.76@trndny03...
>
> "Simon" <(E-Mail Removed)> wrote in message-id:
> <zY_gi.458$(E-Mail Removed)>
>
>>
>> Hi guys hope you can help.
>>
>> I have the following script which connects to remote machines and returns
>> information about the values of certain registry keys.
>> All is good, but the way the script runs is that it does this....
>> Connects to first machine.......returns data
>> Then connects to next machine....returns data
>> Then the next
>> Then the next and so on.
>>
>> What Id like to be able to do, because we have so many machines to
>> process,
>> is to do the following...
>>
>> Connect to, say 10 machines all at the same time, then return data back
>> to
>> the one main console (where I executed the script in the first place),
>> instead of waiting for 1 machine to end, then move on to the next.
>>
>> Any help greatly appreciated. Here is the script.
>>
>> ================================================== =============== Script
>>
>> use Win32;
>> use Win32::Registry;
>>
>> sub RunRegQuery {
>>
>> $p = 'Software\Network Associates\TVD\VirusScan
>> Enterprise\CurrentVersion';
>> Win32::RegOpenKeyEx(&HKEY_LOCAL_MACHINE,$p,&NULL,&
>> KEY_QUERY_VALUE|&KEY_SET_VALUE,$hkey);
>> Win32::RegQueryValueEx($hkey,"szVirDefVer",&NULL,$ type,$Definition);
>> Win32::RegQueryValueEx($hkey,"szProductVer",&NULL, $type,$Product);
>> Win32::RegQueryValueEx($hkey,"szEngineVer",&NULL,$ type,$Engine);
>>
>> print "$SystemName\n";
>> print "$Definition\n";
>> print "$Product\n";
>> print "$Engine\n";
>> print " \n";
>> }
>>
>> ##########
>> ## MAIN ##
>> ##########
>>
>> open (Store, "< llsystems.txt") or die "can't open systems.txt: $!";
>> foreach $line (<Store>)
>> {
>> chomp($line);
>> $SystemName = $line;
>> if ($SystemName =~ /^l/i) {
>> system ("net use \\\\$SystemName\\ipc\$ "password"
>> /user:$SystemName\\useraccount > NUL");
>> sleep 3;
>> RunRegQuery();
>> system ("net use \\\\$SystemName\\ipc\$ /delete /y > 2NUL > NUL"); #
>> Delete
>> previous connection
>> }
>> else {
>> print "not a valid system\n";
>> }
>> }
>> close (Store);
>> exit;
>>
>> ================================================== ================= End
>> of
>> script
>>
>> Output is as follows..
>>
>> C:\>script.pl
>> Lcomputer1
>> 5060
>> 8.0.0.912
>> 5100
>> Lcomputer2
>> 5060
>> 8.0.0.912
>> 5100
>> Lcomputer3
>> 5060
>> 8.0.0.912
>> 5100
>>
>> etc etc
>>
>> Any help greatly appreciated guys, thank you.
>>
>> S

>
> Just use Threads
>



 
Reply With Quote
 
Joe Schaefer
Guest
Posts: n/a
 
      06-29-2007
"Simon" <(E-Mail Removed)> writes:

> What Id like to be able to do, because we have so many machines to
> process, is to do the following...
>
> Connect to, say 10 machines all at the same time, then return data
> back to the one main console (where I executed the script in the first
> place), instead of waiting for 1 machine to end, then move on to the
> next.
>
> Any help greatly appreciated. Here is the script.
>
> ================================================== =============== Script
>
> use Win32;
> use Win32::Registry;



[...]

> system ("net use \\\\$SystemName\\ipc\$ "password"
> /user:$SystemName\\useraccount > NUL");
> sleep 3;
> RunRegQuery();
> system ("net use \\\\$SystemName\\ipc\$ /delete /y > 2NUL > NUL"); # Delete
> previous connection


What you want to do sounds fine, but personally I don't think you're
asking the right question. What you should be asking is "How do I get
rid of these system() calls in my script?", because there's no way
to parallelize your script without doing at least that.

If I were you, I'd be looking over the Win32::Registry documentation
for a way to directly connect to a remote registry. If you can figure
out how to do that, you should be able to access the repository by
calling a suitably modified version of

RunRegQuery($SystemName);

without ever needing to make those calls to system() and sleep().

If it turns out *that* script isn't fast enough, at that point people
will be able to give you advice on how to parallellize it like you
have originally asked.

--
Joe Schaefer
 
Reply With Quote
 
Simon
Guest
Posts: n/a
 
      06-29-2007
Thanks Joe..much appreciated.

I do know Joe how to connect to a remote registry.

I spose what Im trying to do, but cant get myself on some really really
simple examples, so i can play with them, are example scripts on how to fork
a process.
Ive looked at the perldoc but I find the doco not as clear as some good
beginner fork examples so I can test them out on my systems, then gain
confidence that way.

Appreciate your help.

"Joe Schaefer" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> "Simon" <(E-Mail Removed)> writes:
>
>> What Id like to be able to do, because we have so many machines to
>> process, is to do the following...
>>
>> Connect to, say 10 machines all at the same time, then return data
>> back to the one main console (where I executed the script in the first
>> place), instead of waiting for 1 machine to end, then move on to the
>> next.
>>
>> Any help greatly appreciated. Here is the script.
>>
>> ================================================== =============== Script
>>
>> use Win32;
>> use Win32::Registry;

>
>
> [...]
>
>> system ("net use \\\\$SystemName\\ipc\$ "password"
>> /user:$SystemName\\useraccount > NUL");
>> sleep 3;
>> RunRegQuery();
>> system ("net use \\\\$SystemName\\ipc\$ /delete /y > 2NUL > NUL"); #
>> Delete
>> previous connection

>
> What you want to do sounds fine, but personally I don't think you're
> asking the right question. What you should be asking is "How do I get
> rid of these system() calls in my script?", because there's no way
> to parallelize your script without doing at least that.
>
> If I were you, I'd be looking over the Win32::Registry documentation
> for a way to directly connect to a remote registry. If you can figure
> out how to do that, you should be able to access the repository by
> calling a suitably modified version of
>
> RunRegQuery($SystemName);
>
> without ever needing to make those calls to system() and sleep().
>
> If it turns out *that* script isn't fast enough, at that point people
> will be able to give you advice on how to parallellize it like you
> have originally asked.
>
> --
> Joe Schaefer



 
Reply With Quote
 
QoS@domain.invalid
Guest
Posts: n/a
 
      06-29-2007

"Simon" <(E-Mail Removed)> wrote in message-id: <Dh5hi.933$(E-Mail Removed)>

>
> Hi QoS,
>
> Thanks for your input.
>
> Do you mean the module Threads?
>
>
> <(E-Mail Removed)> wrote in message news:qr%gi.5424$ss5.76@trndny03...
> >
> > "Simon" <(E-Mail Removed)> wrote in message-id:
> > <zY_gi.458$(E-Mail Removed)>
> >
> >>

[snip]
> >> Connect to, say 10 machines all at the same time, then return data back
> >> to
> >> the one main console (where I executed the script in the first place),
> >> instead of waiting for 1 machine to end, then move on to the next.
> >>
> >> Any help greatly appreciated. Here is the script.
> >>

[snip]
> >> Any help greatly appreciated guys, thank you.
> >>
> >> S

> >
> > Just use Threads
> >


Yeah have a look at:
perldoc perlthrtut
and
perldoc Threads
and
perldoc Threads::Shared

HtH

J

 
Reply With Quote
 
Simon
Guest
Posts: n/a
 
      06-29-2007
Thanks QoS...appreciate it mate.

<(E-Mail Removed)> wrote in message news:k29hi.11$4e5.4@trndny07...
>
> "Simon" <(E-Mail Removed)> wrote in message-id:
> <Dh5hi.933$(E-Mail Removed)>
>
>>
>> Hi QoS,
>>
>> Thanks for your input.
>>
>> Do you mean the module Threads?
>>
>>
>> <(E-Mail Removed)> wrote in message news:qr%gi.5424$ss5.76@trndny03...
>> >
>> > "Simon" <(E-Mail Removed)> wrote in message-id:
>> > <zY_gi.458$(E-Mail Removed)>
>> >
>> >>

> [snip]
>> >> Connect to, say 10 machines all at the same time, then return data
>> >> back
>> >> to
>> >> the one main console (where I executed the script in the first place),
>> >> instead of waiting for 1 machine to end, then move on to the next.
>> >>
>> >> Any help greatly appreciated. Here is the script.
>> >>

> [snip]
>> >> Any help greatly appreciated guys, thank you.
>> >>
>> >> S
>> >
>> > Just use Threads
>> >

>
> Yeah have a look at:
> perldoc perlthrtut
> and
> perldoc Threads
> and
> perldoc Threads::Shared
>
> HtH
>
> J
>



 
Reply With Quote
 
Mark Clements
Guest
Posts: n/a
 
      07-03-2007
Simon wrote:
<snip>
>
> Thanks Joe..much appreciated.
>
> I do know Joe how to connect to a remote registry.
>
> I spose what Im trying to do, but cant get myself on some really really
> simple examples, so i can play with them, are example scripts on how to fork
> a process.
> Ive looked at the perldoc but I find the doco not as clear as some good
> beginner fork examples so I can test them out on my systems, then gain
> confidence that way.
>
> Appreciate your help.
>


You could look at Parallel::ForkManager - it may make things easier for
you.

Mark


 
Reply With Quote
 
Simon
Guest
Posts: n/a
 
      07-04-2007
Thank you Mark...really appreciate it.

"Mark Clements" <(E-Mail Removed)> wrote in message
news:4689ea03$0$27393$(E-Mail Removed)...
> Simon wrote:
> <snip>
> >
>> Thanks Joe..much appreciated.
>>
>> I do know Joe how to connect to a remote registry.
>>
>> I spose what Im trying to do, but cant get myself on some really really
>> simple examples, so i can play with them, are example scripts on how to
>> fork a process.
>> Ive looked at the perldoc but I find the doco not as clear as some good
>> beginner fork examples so I can test them out on my systems, then gain
>> confidence that way.
>>
>> Appreciate your help.
>>

>
> You could look at Parallel::ForkManager - it may make things easier for
> you.
>
> Mark
>
>



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Kicking off a python script using Windows Scheduled Task korean_dave Python 2 10-19-2008 02:57 AM
ISPs kicking routers off internet? Rob Computer Support 73 07-23-2006 03:59 PM
router kicking modem off line? donna Computer Support 6 01-21-2006 11:51 PM
2nd wireless signal kicking user off network =?Utf-8?B?emFnbmV3?= Wireless Networking 3 09-18-2005 10:43 PM
OnLoad kicking off process Matt Java 2 02-25-2004 04:28 PM



Advertisments