From: Pavel Ustyugov
Date: Mon, 27 Apr 2008 17:02:14 +0000 (UTC)
Subject: Мониторинг дискового пространства Windows с помощью Perl
Данный скрипт позволет мониторить свободное пространство логических дисков на
Windows машинах, с отправкой уведомления на email в случае малогого количества
свободного места на одном из дисков. Нормально работает под XP(SP2) и W2003 SERVER.
На других системах не тестировался. В принципе, должен работать везде где есть
поддержка WMI.
Идея взята от сюда.
Для работы скрипта необходим: ActivePerl
В принципе, данный способ предоставляет широкие возможности по мониторингу
Windows серверов. Доступные классы WMI можно глянуть тут.
1) Настраиваем параметры SMTP.
2) Настраиваем порограммы предупреждения.
3) Загоняем в шедуллер и вперед.
# Win32 disk space monitor
# Tested on ActivePerl
# CopyLeft Pavel Ustyugov aka Pahanivo
# Usage: script.pl [force]
# force - force send report (if warning not found)
my $_script_name = "Win32 disk space monitor";
my $_script_version = "0.3.3";
################################################################################
use strict;
use Win32:LE qw(in);
use Net::SMTP;
sub result_out($);
sub mail_out($);
sub b_to_G ($);
my $Out_Target = "smtp"; #stdout - on screen, email notify don't send; smtp - by mail notify
my $Force_Notify = 0; #0 - send notify by email if warnings found, 1 - send notify by email always
my @Mail_To_List = (
'admin1@test.ru',
'admin2@test.ru',
'admin3@test.ru'
); #list of recipients
my $Mail_From = 'file-server@test.ru';
my $Mail_LocalName = 'localhost'; #change this if have problem with SMTP `helo/ehlo`
my $Mail_SMTP_server = '195.195.195.195';
my @FreeSpaceThreshold = (
["ALERT" , 536870912 ], #(512M)
["CRITICAL" , 1073741824], #(1G)
["WARNING" , 2147483648] #(2G)
); #Threshold must be ascending series!
my $arg;
while ($arg = shift @ARGV) {
if ($arg eq "force") {$Force_Notify = 1;}
}
my $WMIServices;
my $Namespace = "\root\cimv2";
my $DriveCollection;
my $Drive;
my $Machine = "."; #local machine
my $Result;
my $Status = 0; #warning counter
my $i;
my ($Dsec,$Dmin,$Dhour,$Dmday,$Dmon,$Dyear) = (localtime(time))[0,1,2,3,4,5];
$Dmon++; $Dyear+=1900;