use strict; use warnings; use Win32::Service; my (%list, %status); my %STATE = ( 0 => 'unknown', 1 => 'stopped', 2 => 'starting', 3 => 'stopping', 4 => 'running', 5 => 'resuming', 6 => 'pausing', 7 => 'paused', ); my $display_name = shift @ARGV || die "usage: $0 ServiceName MachineName\n"; my $machine = shift @ARGV || die "usage: $0 ServiceName MachineName\n"; $machine = "\\\\$machine"; $machine =~ s/^\\{2}/\\\\/; print "Please enter the username to connect as:\n"; chomp (my $usr = ); print "Please enter your Password:\n"; chomp (my $pwd = ); my $cmd = "net use $machine\\ipc\$ /user:$usr $pwd"; print "$cmd\n"; system ("$cmd"); if (Win32::Service::GetServices($machine, \%list)) { if (defined $list{$display_name}) { if (Win32::Service::GetStatus($machine, $list{$display_name}, \%status)) { print "=================================================================================================\n"; print "The $display_name service on $machine is " . $STATE{$status{CurrentState}} . "\n"; print "=================================================================================================\n\n"; } else { print "Could not find the '$display_name' service.\n"; print "Names are case sensitive.\n"; } } } else { print "Could Not connect to $machine: "; print Win32::FormatMessage(Win32::GetLastError()), "\n"; } system ("net use $machine\\ipc\$ /d");