Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @ECHO off
- 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 "ms" >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
- )
- REM SC \\%SYSTEMNAME% query %SERVICENAME% | FIND "FAILED 1060" >nul 2>&1
- REM IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 (
- REM ECHO Failure! Service %SERVICENAME% is not valid!
- REM EXIT /B 2
- REM )
- REM SC \\%SYSTEMNAME% query %SERVICENAME% | FIND "STATE" >nul 2>&1
- REM IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 (
- REM ECHO Failure! Server \\%SYSTEMNAME% or service %SERVICENAME% is not accessible or is offline!
- REM EXIT /B 3
- REM )
- :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%
- 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 ^<start^|stop^|restart^> ^<SERVICE^> [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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement