use strict; use Win32::OLE qw( in ); use constant wbemFlagReturnImmediately => 0x10; use constant wbemFlagForwardOnly => 0x20; my $NameSpace = "root\\cimv2"; my $Machine = shift @ARGV || "."; $Machine =~ s/^[\\\/]+//; print $Machine. "\n"; my $WMIServices = Win32::OLE->GetObject( "winmgmts:{impersonationLevel = impersonate}!\\\\$Machine\\$NameSpace") || die; # get TotalVisibleMemorySize, FreePhysicalMemory, TotalVirtualMemorySize, FreeVirtualMemory print "Win32_OperatingSystem: "; my $col = $WMIServices->ExecQuery( "SELECT * FROM Win32_OperatingSystem", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly ); foreach my $memOS (in $col) { printf "%s %ld %ld %ld %ld", $memOS->{Name}, $memOS->{TotalVisibleMemorySize}, $memOS->{FreePhysicalMemory}, $memOS->{TotalVirtualMemorySize}, $memOS->{FreeVirtualMemory}; }