in reply to Re^12: how to print out windows service status
in thread how to print out windows service status

If you want to repeat the checks read the list of services into an array.

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

Replies are listed 'Best First'.
Re^14: how to print out windows service status
by ytjPerl (Scribe) on Aug 03, 2017 at 18:29 UTC
    when I ran this script, it generates a too big file to open. I do not quite understand, The repeat times is not too bad.

      That script doesn't create a file, you need to show the code you are running.

        #!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 = <FILE>; chomp $hostname; my @services = <FILE>; 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 whites +pace if (exists $available{$_}) { my $shortname = $available{$_}; my %status; GetStatus($hostname, $shortname, \%status); my $state_no = $status{'CurrentState'}; printf MYFILE " ServiceStatus: %s %s %s \n", $hostnam +e, $shortname, $state_name[$state_no]; } else { print MYFILE "-- ERROR -- '$_' status not avaiable\n"; } } sleep (10) }
        This is what I modified based on the script you gave me. I tried an approach that using windows scheduler to run original script at an interval time, but I did not get the output file via that approach. I do not know what configuration I have missed. Now I am trying to hard coding the repeats to check services, but it generated a huge file within a min.