#!/usr/bin/perl use strict; use warnings; use Win32::OLE qw(in); ### Need to move to Win32 specific section... our ($Registry,$WMI); if ($^O =~ /MSWin32/i) { require Win32; Win32::->import(); require Win32::TieRegistry; Win32::TieRegistry::->import(Delimiter =>'/'); # require Win32::OLE; Win32::OLE::->import(qw(in)); ### Doesn't work! $WMI = Win32::OLE->GetObject('winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\CimV2'); unless (defined $WMI) {Death("Can't connect to WMI interface!");} $WMI->Security_->Privileges->AddAsString('SeLoadDriverPrivilege', 1); } elsif ($^O =~ /Linux/i) { # linux things } else {die("Unknown Operating System: <$^O>");} my $ram; my $i = 1; my %inv; foreach my $item (in $WMI->ExecQuery('Select * from Win32_PhysicalMemory')) { my $bank = int($item->Capacity/1024/1024); my $spd = $item->Speed; next unless $spd && $bank; $inv{"Dimm_$i"} = "$bank Mb $spd MHz"; $ram += $bank; $i++; } $inv{"Ram_Installed"} = "$ram Mb" if $ram; foreach my $key (sort keys %inv) {print "$key: \t$inv{$key}\n";} exit;