Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
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 browsing the Monastery: (9)
As of 2015-07-05 14:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (67 votes), past polls