リモートサーバーのサービスステータスをチェックするPerlスクリプトを書こうとしています。Win32::Serviceモジュールを使用して目標を達成しています。
Win32::Service::GetStatus
CurrentStatus
によって返される一部のサービスの値は、services.mscアプレットから観察されたものとまったく同じではないことがわかりました。
これが、scriptとの両方の出力とともに使用しているスクリプトservics.msc
です。
use Data::Dumper;
use Win32;
use Win32::Service;
use strict;
use warnings;
my %statcodeHash = ( '1' => 'stopped.',
'2' => 'start pending.',
'3' => 'stop pending.',
'4' => 'running.',
'5' => 'continue pending.',
'6' => 'pause pending.',
'7' => 'paused.' );
my @serviceNames = qw(NNMAction RpcEptMapper smstsmgr SNMPTRAP);
foreach my $serv (@serviceNames)
{ my %status;
my $ret = Win32::Service::GetStatus('nnmi.hclt.corp.hcl.in', $serv, \%status);
if ($ret)
{ print "success\t$statcodeHash{$status{CurrentState}}\t$serv\n";
}
else
{ print Win32::FormatMessage(Win32::GetLastError()), "\n";
}
}
スクリプトからの出力
D:\AVI MEHENWAL\PERL\SCRIPTS\PROJECTS\Serve Management>perl -w perl_RemoteServiceStatus.pl
success stopped. NNMAction
success running. RpcEptMapper
success stopped. smstsmgr
success stopped. SNMPTRAP
Services.mscからの出力
Name Descrition Status StartupType LogOnAs
NNMAction bla bla bla Started Manual LocalSystem
誰かが私の目標を達成するためにどのようなアプローチに従うべきかを私に提案できますか?私の方法が間違っているか、Perlモジュールの観点から何かが欠けていますか?