2011-01-18 14 views
5

Necesito recopilar datos de memoria de los sistemas operativos Windows mediante WMI. En ese sentido, desarrollé un script Perl para generar dichos datos. Sin embargo, me pregunto si mi método es correcto y cuáles son las alternativas. Se pretende que el método de recopilación de datos sea lo más amplio posible en términos del sistema operativo Windows.Obtener valores de memoria WMI con Perl

Si usted no es un perlish, esto es lo que lo que debe comprobar:

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

Esta es mi guión:

#!/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; 
} 

Nota: En 2011-01-19 I' he actualizado esta secuencia de comandos, ya que en ese momento no había conflictos con los comentarios publicados.

+1

Se ve bien desde aquí. 'winmgmts' y' Win32_OperatingSystem' son compatibles desde Windows 2000. ¿Necesita soportar algo más antiguo que eso? – mob

+0

Hum ... ¡Creo que está mal! Después de investigar en Google, encontré que: Memoria virtual = Memoria física (RAM) + Memoria extendida (Disco) Necesito recrear la secuencia de comandos ... –

+0

He actualizado el script de Perl ... ¿Es correcto? ¿ahora? –

Respuesta

3

sugiero que eche un vistazo a este pequeño proyecto Perl:

Check WMI Plus

Es cliente menos, que funciona bajo Linux y trabaja también con máquinas Windows remotos. Lo he estado usando recientemente para controlar el uso de la memoria.