#  DumpShares.pl
#  Example 3.1:
#  ----------------------------------------
#  From "Win32 Perl Scripting: Administrators Handbook" by Dave Roth
#  Published by New Riders Publishing.
#  ISBN # 1-57870-215-1
#
#  This script displays all shared directories on a remote machine.
#
print "From the book 'Win32 Perl Scripting: The Administrator's Handbook' by Dave Roth\n\n";


use Win32;
use Win32::Lanman;

push( @ARGV, Win32::NodeName() ) if( ! scalar @ARGV );
foreach my $Machine ( @ARGV )
{
  my @List;
  $Machine =~ s#^[\\/]*#\\\\#;
  
  print "\nShare list for '$Machine'\n";
  if( Win32::Lanman::NetShareEnum( $Machine, \@List ) )
  {
    foreach my $Share ( @List )
    {
      my( $Remark, $Path, $NetName );
      
      $NetName = $Share->{netname};
      if( "" ne $Share->{remark} )
      {
        $Remark = "($Share->{remark})";
      }
      if( "" ne $Share->{path} )
      {
        $Path = $Share->{path};
      }
      else
      {
        $Path = "No permission to display";
      }
      push( @ShareList, { name => $NetName, 
                          remark => $Remark, 
                          path => $Path } );
    }
    $~ = Share_Header;
    write;

    $~ = Share_Info;    
    $iCount = 0;

    foreach $Share ( sort( { 
                            lc $a->{name} cmp lc $b->{name} 
                           } @ShareList ) )
    {
        $iCount++;
        write;
    }
  }
  else
  {
      print "...not available : ";
      print Win32::FormatMessage( Win32::Lanman::GetLastError() );
  }
  
  print "\n";
}

format Share_Info =
@>>> @<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<
$iCount, $Share->{name}, $Share->{remark}, $Share->{path}  
~                       ^<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<
                        $Share->{remark}, $Share->{path}  
~                       ^<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<
                        $Share->{remark}, $Share->{path}  
.
      
format Share_Header = 
@||| @<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<
"Num", "Share Name", "Comment", "Path"
---- ------------------ ----------------------- ------------------------
.  