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


In reply to Re: WMI and Perl by NetWallah
in thread WMI and Perl by softworkz

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.