If you don't have it yet, get Dave Roth's "Win32 Perl Scripting: Administrators Handbook".
Here's just one sample from the book:
# WMIDisks.pl
# ----------------------------------------
# From "Win32 Perl Scripting: Administrators Handbook" by Dave Roth
# Published by New Riders Publishing.
# ISBN # 1-57870-215-1
#
# This script displays information about disks on a remote machine.
#
print "From the book 'Win32 Perl Scripting: The Administrator's Handbook' by Dave Roth\n\n";
use Win32;
use Win32::OLE qw( in );
%TYPE = (
0 => 'Unknown',
1 => 'No root',
2 => 'Removable',
3 => 'Local',
4 => 'Network',
5 => 'CDRom',
6 => 'RAM Disk'
);
push( @ARGV, Win32::NodeName() ) if( ! scalar @ARGV );
foreach my $Machine ( @ARGV )
{
# Remove any backslashes
$Machine =~ s/\\+//;
my $CLASS = "WinMgmts:{impersonationLevel=impersonate}!//$Machine";
print "\\\\$Machine\n";
if( my $WMI = Win32::OLE->GetObject( $CLASS ) )
{
local $Disk;
$~ = DISK_HEADER_FORMAT;
write;
$~ = DISK_FORMAT;
foreach $Disk ( in( $WMI->InstancesOf( "Win32_LogicalDisk" ) ) )
{
local $Drive = $TYPE{$Disk->{DriveType}};
local %Size = (
total => FormatNumber( $Disk->{Size} ),
free => FormatNumber( $Disk->{FreeSpace} )
);
write;
}
}
print "\n";
}
sub FormatNumber
{
my( $Number ) =@_;
while( $Number =~ s/^(-?\d+)(\d{3})/$1,$2/ ){};
return( $Number );
}
format DISK_HEADER_FORMAT =
FS Type Size Free
--- ----- --------- --------------------- ---------------------
.
format DISK_FORMAT =
@<< @<<<< @<<<<<<<< @>>>>>>>>>>>>>>>>>>>> @>>>>>>>>>>>>>>>>>>>>
$Disk->{Name}, $Disk->{FileSystem}, $Drive, $Size{total}, $Size{free}
.