#!/usr/bin/perl -w use strict; use Win32::OLE('in'); use Data::Dumper; use constant wbemFlagReturnImmediately => 0x10; use constant wbemFlagForwardOnly => 0x20; my @computers = qw( WWMONITOR3 ); foreach my $computer (@computers) { my $objWMIService = Win32::OLE->GetObject("winmgmts:\\\\$computer\\root\\CIMV2") or die "WMI connection failed.\n"; my $colItems = $objWMIService->ExecQuery( "select FreeSpace,Size,Name from Win32_LogicalDisk where DriveType=3", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly); foreach my $Disk( in $colItems){ print "$computer : Drive $Disk->{Name} has " . format_kilo($Disk->{FreeSpace}) . " free (" . format_kilo($Disk->{Size}) . " total)\n"; } } ############################################################### sub format_kilo # Kilo, mega and gig { my $number = shift; my $fixwidth = shift; my $suffix = " "; if ($number > 0x40000000) { $number /= 0x40000000; $suffix = 'G'; } elsif ($number > 0x100000) { $number /= 0x100000; $suffix = 'M'; } elsif ($number > 0x400) { $number /= 0x400; $suffix = 'K'; } # Split integer and decimal parts of the number and add commas my $integer = int($number); # Add Leading spaces if fixed width $fixwidth and $integer = ' ' x ($fixwidth - length($integer) - length($suffix)) . $integer; # Combine it all back together and return it. return $integer.$suffix; }