use strict; use Win32::Console; use Win32::Service; my %service; Win32::Service::GetServices ("", \%service); my @sorted = sort (keys (%service)); my $cons = Win32::Console->new (STD_OUTPUT_HANDLE); my $current_date = localtime (time); my %codes = ( 1 => "Stopped.", 2 => "Starting.", 3 => "Stopping.", 4 => "Running.", 5 => "Continue.", 6 => "Pausing.", 7 => "Paused.", 8 => "Unknown.", 9 => "Unknown." ); while (1) { $cons->Cls (); print "\n\n\n\n"; print "\t" . ('-' x 53) . "\n"; #Menu heading print "\t \t Windows Services Status Viewer\n"; print "\t" . ('-' x 53) . "\n\n"; print "\t 1. Service names started in ascending order.\n"; print "\t 2. Service names stopped in ascending order.\n"; print "\t 3. Exit.\n\n"; print "\t" . ('-' x 53) . "\n"; #Menu heading print "\t \t\t Version 1.0\n"; print "\t \t $current_date\n"; print "\t" . ('-' x 53) . "\n\n"; print "\n\n\t\t Select option (1 to 3) = "; my $option = ; if ($option == 1) { started (); } else { if ($option == 2) { stopped (); } else { if ($option == 3) { print "\t" . ('-' x 53) . "\n"; print "\t \t\t Goodbye\n"; print "\t" . ('-' x 53) . "\n"; last; } else { if ($option != [1 - 3]) { print " Please enter a valid a valid option (1 - 3) \n "; system (" pause "); } } } } } sub started { foreach my $number (1 .. @sorted) { my $key = $sorted[$number - 1]; my %status; Win32::Service::GetStatus ("", $service{$key}, \%status); if ($status{CurrentState} == 4) { print " \t$number\t $key\n "; } } print " Please enter the number of the service to terminate : \n "; chomp (my $user_selection = ); if (--$user_selection < 0 || $user_selection > $#sorted) { print "Invalid service number\n"; return; } my $key = $sorted[$user_selection]; my %status; Win32::Service::GetStatus ("", $service{$key}, \%status); my $running = $status{CurrentState}; if ($running == 4) { print "$key $codes{$running} and will be stopped \n "; Win32::Service::StopService ("", $key); print "$key has been stopped !\n "; } }