2011-01-18 18 views
5

WMI kullanarak Windows işletim sistemlerinin bellek verilerini almam gerekiyor. Bu anlamda, böyle bir veri üretmek için bir Perl betiği geliştirdim. Ancak, yöntemimin doğru olup olmadığını ve alternatiflerin neler olduğunu merak ediyorum. Veri toplama yönteminin Windows işletim sistemi açısından mümkün olduğunca geniş olması amaçlanmıştır.Perl'yi kullanarak WMI Bellek Değerlerini Alın

Bir perlish değilseniz, bu ne kontrol etmek ne: Ben 2011-01-19 At:

#!/bin/env perl 

use Win32::OLE; 

use strict; 
use warnings; 

my $wmi = Win32::OLE->GetObject("winmgmts://./root/cimv2") 
    or die "Failed getobject\n"; 

my $list, my $v; 

$list = $wmi->InstancesOf("Win32_OperatingSystem") 
    or die "Failed getobject\n"; 

my $end_time = time; 


my ($total_mem, $free_mem, $used_mem, $mem_percent, $free_percent); 

foreach $v (in $list) { 

    $total_mem = $v->{TotalVisibleMemorySize}; 
    $free_mem = $v->{FreePhysicalMemory}; 
    $used_mem = $total_mem - $free_mem; 
    $mem_percent = sprintf("%.2f", $used_mem/$total_mem * 100); 
    $free_percent = sprintf("%.2f", $free_mem/$total_mem * 100); 

    print "Memory used: $mem_percent\%\n"; 
    print "Memory free: $free_percent\%\n"; 
    print "Memory total: $total_mem kb\n"; 
    print "Memory used: $used_mem kb\n"; 
    print "Memory free: $free_mem kb\n"; 

    my $total_swap_mem = $v->{SizeStoredInPagingFiles}; 
    my $free_swap_mem = $v->{FreeSpaceInPagingFiles}; 
    my $used_swap_mem = $total_swap_mem - $free_swap_mem; 
    my $used_swap_mem_perc = ($total_swap_mem - $free_swap_mem)/$total_swap_mem * 100; 

    printf "Swap total:%d kb\n", $total_swap_mem; 
    printf "Swap free:%d kb\n", $free_swap_mem; 
    printf "Swap used:%d kb\n", $used_swap_mem; 
    printf "Swap used:%.2f %%\n", $used_swap_mem_perc; 
} 

Not:

MEM_USED = Win32_OperatingSystem->TotalVisibleMemorySize - Win32_OperatingSystem->FreePhysicalMemory 
SWAP_USED = (Win32_OperatingSystem->SizeStoredInPagingFiles - Win32_OperatingSystem->FreeSpaceInPagingFiles)/Win32_OperatingSystem->SizeStoredInPagingFiles 

Bu benim senaryom ve o zamanlar yayınlanmış yorumlarla herhangi bir çatışma olmadığı için bu betiği güncellediler.

+1

Buradan güzel görünüyor. Winmgmts ve 'Win32_OperatingSystem', Windows 2000'den beri desteklenmektedir. Bundan daha eski bir şeyi desteklemeniz gerekiyor mu? – mob

+0

Hum ... Yanlış olduğunu düşünüyorum! Bazı google araştırmalarından sonra şunu buldum: Sanal Bellek = PhysicalMemory (RAM) + Genişletilmiş Bellek (Disk) Komut dosyasını yeniden oluşturmam gerekiyor ... –

+0

Perl komut dosyasını güncelledim ... doğru mu Şimdi? –

cevap

3

Ben bu küçük Perl projesinde bakmak öneririm:

Check WMI Plus

Linux altında çalışır ve uzak Windows makineleri ile de çalışır, daha az müşteri. Son zamanlarda bellek kullanımını izlemek için kullanıyorum.

İlgili konular