Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

remotemachine accessing: did not get any values when I use Win32::NetResource

by jesuashok (Curate)
on Sep 29, 2006 at 03:04 UTC ( #575455=perlquestion: print w/ replies, xml ) Need Help??
jesuashok has asked for the wisdom of the Perl Monks concerning the following question:

monks,

Executed the below code.

use strict; use Data::Dumper; use Win32::NetResource qw(:DEFAULT GetSharedResources GetError); if (GetSharedResources(my $resources, RESOURCETYPE_DISK, { RemoteName => "192.168.10.67"})) { print "GetSharedResources Success\n"; print Dumper [ $resources ]; foreach my $href (@$resources) { print "-----\n"; foreach(keys %$href) { print "$_: $href->{$_}\n"; } } } else { print "problem in GetSharedResources\n"; }
Output :-
C:\Perl>perl resource.pl GetSharedResources Success $VAR1 = [ undef ];
any clue ?
Update: Executed the above code as normal user in windows.

"Keep pouring your ideas"

Comment on remotemachine accessing: did not get any values when I use Win32::NetResource
Select or Download Code
Re: remotemachine accessing: did not get any values when I use Win32::NetResource
by ikegami (Pope) on Sep 29, 2006 at 04:27 UTC
    Dunno why you're getting success. Your code was giving me an error until I used RemoteName => "\\\\www.xxx.yyy.zzz" or RemoteName => "\\\\machinename". Note the two leading slashes in the string (4 in the string literal).

      did you check this in windows ?

      "Keep pouring your ideas"

        Yes (Win2k and WinXP).

        If $resources is undef, it's because it wasn't changed because no shares were found. I'm not sure why you're using a reference at all.

        use strict; use warnings; use Win32::NetResource qw( :DEFAULT GetSharedResources ); # IP address, DNS name or NETBIOS name. my $addr = @ARGV ? $ARGV[0] : '127.0.0.1'; GetSharedResources( \my @resources, RESOURCETYPE_DISK, { RemoteName => "\\\\$addr" } ) or do { Win32::NetResource::WNetGetLastError( my $errcode, my $errmsg, my $name); die("Unable to get ${addr}'s shares: $name - $errmsg\n"); }; if (@resources) { foreach my $href (@resources) { print "-----\n"; foreach(keys %$href) { print "$_: $href->{$_}\n"; } } } else { print "No shares found\n"; }
Re: remotemachine accessing: did not get any values when I use Win32::NetResource
by bobf (Monsignor) on Sep 29, 2006 at 04:50 UTC

    You're declaring $resources in the call to GetSharedResources. The documentation states the syntax for calling that sub is GetSharedResources( \@Resources, dwType, \%NetResource = NULL ) (note the array ref as the first argument). The tests I ran gave different results based on how the variable was declared and initialized.

    use strict; use warnings; use Data::Dumper; testsub( my $ref1, 'hi' ); print Dumper( $ref1 ); # output: $VAR1 = undef; my $ref2; testsub( $ref2, 'hello' ); print Dumper( $ref2 ); # output: $VAR1 = undef; my $ref3 = []; testsub( $ref3, 'howdy' ); print Dumper( $ref3 ); # output: $VAR1 = [ 'howdy' ]; sub testsub { my ( $ref, @args ) = @_; push( @$ref, @args ); }

    Try declaring $resources before the sub call, and assign an array ref to it rather than leaving it undef. I hope another monk can help to explain this behavior, because I'm not sure I understand it.

      I thought it might be that at first, but it gets auto-vivified. The problem is the invalid resource name.

      use strict; use Data::Dumper; use Win32::NetResource qw(:DEFAULT GetSharedResources GetError); #my $resources = \(); my @resources = (); if (GetSharedResources(\@resources, RESOURCETYPE_DISK, { RemoteName => "192.168.10.67"})) { print "GetSharedResources Success\n"; print Dumper [ @resources ]; foreach my $href (@resources) { print "-----\n"; foreach(keys %$href) { print "$_: $href->{$_}\n"; } } } else { print "problem in GetSharedResources\n"; }
      modififed the code as follows. still same problem ? :-(

      "Keep pouring your ideas"

        See the first reply from ikegami. RemoteName needs to be a properly formatted UNC. Change "192.168.10.67" to "\\\\192.168.10.67" and your code should work fine.

        digger

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (8)
As of 2014-12-29 11:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (186 votes), past polls