2011-01-18 18 views
5

WMIを使用してWindowsオペレーティングシステムのメモリデータを収集する必要があります。その意味で、私はそのようなデータを生成するPerlスクリプトを開発しました。しかし、私の方法が正しいのか、何が変わるのだろうかと思います。データを収集する方法は、Windows OSの観点からできるだけ広くすることが意図されています。Perlを使用してWMIメモリ値を取得する

あなたがPerl的でない場合は、これは私が何をチェックするためのものです:

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

これは私のスクリプトです:

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

注:2011-01-19で I」当時、投稿されたコメントとの競合はなかったので、このスクリプトを更新しました。

+1

ここからよく見えます。 'winmgmts'と' Win32_OperatingSystem'はWindows 2000以降でサポートされています。それ以上のものをサポートする必要はありますか? – mob

+0

ハム...私は間違っていると思う!いくつかのGoogleの調査の後で私はそれを発見した: 仮想メモリ=物理メモリ(RAM)+拡張メモリ(ディスク) 私はスクリプトをrecreatする必要がある... –

+0

私はperlスクリプトを更新している...それは正しい今? –

答えて

3

私はあなたがこの小さなPerlのプロジェクトを見てみることをお勧め:

Check WMI Plus

それはLinuxで動作し、リモートのWindowsマシンでも動作しますが、以下のクライアントです。私は最近メモリ使用量を監視するためにそれを使用してきました。

関連する問題