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

Maybe it's whitespace in the file, try this

#!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 = '/Perl/XiServiceList.txt'; open FILE, '<', $filename;# autodie my $hostname = <FILE>; chomp $hostname; print "Checking Services available for '$hostname'\n"; my %available=(); GetServices($hostname,\%available) or die "$!"; # add short names $available{$_} = $_ for values %available; print "Checking services in list\n"; while (<FILE>){ # 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"; } } close FILE;
poj

Replies are listed 'Best First'.
Re^12: how to print out windows service status
by ytjPerl (Scribe) on Aug 01, 2017 at 16:36 UTC
    awesome! Thank you. This is working.
Re^12: how to print out windows service status
by ytjPerl (Scribe) on Aug 01, 2017 at 18:13 UTC
    I am adding  while(){sleep(30);} in order to have status checked every 30 seconds. but it is just stopping there after the first time check.
    #!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 = '/Users/tyang/Documents/Traning/Perl/XiServiceList.txt' +; open FILE, '<', $filename;# autodie my $hostname = <FILE>; chomp $hostname; print "Checking Services available for '$hostname'\n"; my %available=(); GetServices($hostname,\%available) or die "$!"; # add short names $available{$_} = $_ for values %available; print "Checking services in list\n"; while() { sleep(30); while (<FILE>){ # 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"; } } }

      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; }
        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.