The top answer to this question tells me how to stop/start a remote service. Great. Now, all I need is to wait for the actual stop/start to complete. So, what I\'m looking f
I've made a minor change to the script, so that it is running under Windows 10 or similar Versions. The command "sleep" was replaced with the command "timeout".
@ECHO off
:: This script originally authored by Eric Falsken http://stackoverflow.com/
:: Revised by George Perkins 10/20/2011
:: Revised by Armando Contestabile 02/23/2015
:: Revised by Sascha Jelinek 11/13/2020
IF "%1"=="" GOTO Usage
IF "%2"=="" GOTO Usage
SET ACTION=%1
SET SERVICENAME=%2
IF "%3"=="" (
SET SYSTEMNAME=%COMPUTERNAME%
) ELSE (
SET SYSTEMNAME=%3
)
IF "%ACTION%" == "stop" (
SET ACTION=STOP
) ELSE IF "%ACTION%" == "STOP" (
SET ACTION=STOP
) ELSE IF "%ACTION%" == "start" (
SET ACTION=START
) ELSE IF "%ACTION%" == "START" (
SET ACTION=START
) ELSE IF "%ACTION%" == "restart" (
SET ACTION=RESTART
) ELSE IF "%ACTION%" == "RESTART" (
SET ACTION=RESTART
) ELSE GOTO Usage
SET STATE=
SET CURRENT_STATUS=
SET /A DEFAULT_DELAY=5
SET /A SLEEP_COUNT=0
SET /A RESTARTED=0
SET /A MAX_WAIT_PERIODS=5
ECHO.
ECHO Attempting to %ACTION% service %SERVICENAME% on computer %SYSTEMNAME%.
PING -n 1 %SYSTEMNAME% | FIND "Antwort von" >nul 2>&1
IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 (
ECHO Failure!! Server \\%SYSTEMNAME% or service %SERVICENAME% is not accessible or is offline!
EXIT /B 1
)
SC \\%SYSTEMNAME% query %SERVICENAME% | FIND "FAILED 1060" >nul 2>&1
IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 (
ECHO Failure! Service %SERVICENAME% is not valid!
EXIT /B 2
)
SC \\%SYSTEMNAME% query %SERVICENAME% | FIND "STATE" >nul 2>&1
IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 (
ECHO Failure! Server \\%SYSTEMNAME% or service %SERVICENAME% is not accessible or is offline!
EXIT /B 3
)
:Dispatch
FOR /f "tokens=*" %%i IN ('SC \\%SYSTEMNAME% query %SERVICENAME% ^| FIND "STATE"') DO SET STATE=%%i
ECHO %STATE% | FINDSTR /C:"1" >nul
IF %ERRORLEVEL%==0 SET CURRENT_STATUS=STOPPED
ECHO %STATE% | FINDSTR /C:"2" >nul
IF %ERRORLEVEL%==0 SET CURRENT_STATUS=START_PENDING
ECHO %STATE% | FINDSTR /C:"3" >nul
IF %ERRORLEVEL%==0 SET CURRENT_STATUS=STOP_PENDING
ECHO %STATE% | FINDSTR /C:"4" >nul
IF %ERRORLEVEL%==0 SET CURRENT_STATUS=RUNNING
ECHO %STATE% | FINDSTR /C:"5" >nul
IF %ERRORLEVEL%==0 SET CURRENT_STATUS=CONTINUE_PENDING
ECHO %STATE% | FINDSTR /C:"6" >nul
IF %ERRORLEVEL%==0 SET CURRENT_STATUS=PAUSE_PENDING
ECHO %STATE% | FINDSTR /C:"7" >nul
IF %ERRORLEVEL%==0 SET CURRENT_STATUS=PAUSED
ECHO Current status of service is %CURRENT_STATUS%
IF NOT "%CURRENT_STATUS%"=="RUNNING" IF NOT "%CURRENT_STATUS%"=="STOPPED" IF NOT "%CURRENT_STATUS%"=="PAUSED" (
IF "%SLEEP_COUNT%"=="%MAX_WAIT_PERIODS%" (
ECHO Service state won't change. Script exececution is canceled.
EXIT /B 4
)
ECHO Service State is changing, waiting %DEFAULT_DELAY% seconds...
TIMEOUT /t %DEFAULT_DELAY% /NOBREAK
SET /A SLEEP_COUNT+=1
GOTO Dispatch
)
IF "%ACTION%"=="START" (
IF "%CURRENT_STATUS%"=="RUNNING" (
ECHO Service %SERVICENAME% is running.
GOTO EndExit
) ELSE (
GOTO StartService
)
) ELSE IF "%ACTION%"=="RESTART" (
IF "%CURRENT_STATUS%"=="RUNNING" (
IF %RESTARTED%==1 (
ECHO Service %SERVICENAME% restarted.
GOTO EndExit
)
SET /A SLEEP_COUNT=0
GOTO StopService
) ELSE (
SET /A RESTARTED=1
GOTO StartService
)
) ELSE IF "%ACTION%"=="STOP" (
IF "%CURRENT_STATUS%"=="STOPPED" (
ECHO Service %SERVICENAME% is stopped.
GOTO EndExit
) ELSE (
GOTO StopService
)
)
:StartService
ECHO Starting %SERVICENAME% on \\%SYSTEMNAME%
SC \\%SYSTEMNAME% start %SERVICENAME% >nul 2>&1
SET SLEEP_COUNT=0
GOTO Dispatch
:StopService
ECHO Stopping %SERVICENAME% on \\%SYSTEMNAME%
SC \\%SYSTEMNAME% stop %SERVICENAME% >nul 2>&1
SET SLEEP_COUNT=0
GOTO Dispatch
:Usage
ECHO This script can start/stop/restart a local or remote service, waiting for the service to stop/start ^(if necessary^).
ECHO.
ECHO Usage:
ECHO %0 ^ ^ [SYSTEM]
ECHO.
ECHO If no SYSTEM is provided, the script attempts to execute on the local system.
EXIT /B 5
:EndExit
ECHO.
EXIT /B 0