in reply to WMI and Perl

Here is some working code, based on yours Plus this msdn article.
#!/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 w +here 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) - le +ngth($suffix)) . $integer; # Combine it all back together and return it. return $integer.$suffix; }
UPDATE:
Your code would work if you checked the value of $objItem->{DriveType} , and printed only when that had a value of "3" (Logical Disk). Most likely, your last disk has a value of "5" (CD ROM), which does not return valid FreeSpace or other attributes, uless it has a CD mounted.

Hence, if you want to look at VOLUMES, make sure you are not looking at mapped drives, CD's etc - and limit your examination to {DriveType} == 3.

    ..."I don't know what the facts are but somebody's certainly going to sit down with him and find out what he knows that they may not know, and make sure he knows what they know that he may not know, and that's a good thing. I think it's a very constructive exchange," --Donald Rumsfeld

Replies are listed 'Best First'.
Re^2: WMI and Perl
by softworkz (Monk) on Jan 25, 2005 at 18:58 UTC
    ++ for everyones help, it seems to be the cd rom. Thanks for the samples.
    to my code I added this"SELECT * FROM Win32_Volume where DriveLetter = 'c:\'