use strict; use Win32::Lanman; use File::Spec qw (splitdir); my $input = shift @ARGV; push (my @SrvLst, $input); for my $Srv (@SrvLst) { &Get_Shr($Srv); print "___________________________________________\n"; } sub Get_Shr { my $Machine = shift @_; my $UncSrvName = "\\\\" . $Machine; print "\nAttempting to access '$UncSrvName'\n"; if (Win32::Lanman::NetShareEnum( $UncSrvName , \ my @EnumLst)) { my %SeenPath=(); for my $Share (@EnumLst ) { next if ( ($Share->{path}) =~ /^c/i); next if ( ($Share->{netname})=~ /ipc\$|rpc\$|netlogon\$|admin\$|^CDROM|^\w\$/i); my @SplitDir = File::Spec->splitdir(uc ($Share->{path})); my $DrvLttr = @SplitDir[0]; my $TopDir = @SplitDir[1]; my $DrvTop = $DrvLttr . "\\" . $TopDir; unless ( ($SeenPath{($DrvTop)})) { $SeenPath{$DrvTop}=1; print "\nDrvTop=> $DrvTop "; $DrvLttr =~ s/:/\$/; my $TargetPath = $UncSrvName . "\\". $DrvLttr ."\\" . $TopDir; print "\tSizing "; if (opendir ( DIR, "$TargetPath")) { print "$TargetPath"; my ($Size)=( (qx{dir /s "$TargetPath"})[-2]=~ /([\d,]+) bytes/ ); print " : $Size\n"; undef $Size; } else { warn " \n(Access Error : $^E)\n"; } } } } else { print Win32::FormatMessage(Win32::Lanman::GetLastError()) . " $Machine\n"; } }