#!perl use strict; use autodie; use Win32::Service qw'GetServices GetStatus StopService'; use POSIX; my $date = strftime("%Y-%m-%d", localtime); my @state_name = qw( UNKNOWN Stopped START_PENDING STOP_PENDING Running CONTINUE_PENDING PAUSE_PENDING PAUSED ERROR ); my $filename = '/log_script/ServiceList.txt'; open FILE, '<', $filename;# autodie my $hostname = ; chomp $hostname; my @services = ; close FILE; open MYFILE, ">>", "/log_script/service_logs/servicestatus\_$date\.log"; print MYFILE "Checking Services available for '$hostname'\n"; my %available=(); GetServices($hostname,\%available) or die "$!"; # add short names $available{$_} = $_ for values %available; for (my $n=0; $n <= 3; $n++) { my $t = scalar localtime; print MYFILE "\nChecking services in list - run $n $t\n"; while (@services) { s/^\s+|\s+$//g; # trim leading and trailing whitespace if (exists $available{$_}) { my $shortname = $available{$_}; my %status; GetStatus($hostname, $shortname, \%status); my $state_no = $status{'CurrentState'}; printf MYFILE " ServiceStatus: %s %s %s \n", $hostname, $shortname, $state_name[$state_no]; } else { print MYFILE "-- ERROR -- '$_' status not avaiable\n"; } } sleep (10) }