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

this file is just a list of services name with first entry hostname.
localhost AMD External Events Utility aspnet_state SensrSvc CryptSvc

Replies are listed 'Best First'.
Re^11: how to print out windows service status
by poj (Abbot) on Aug 01, 2017 at 15:27 UTC

    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
      awesome! Thank you. This is working.
      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; }