远程重启 Windows 服务(仅当已启动时才停止/启动)

远程重启 Windows 服务(仅当已启动时才停止/启动)

我目前正在使用以下 BAT 文件来重新启动远程服务:

sc \\MyServer stop MyRemoteService
sc \\MyServer start MyRemoteService

这对于一台计算机来说效果很好,但我想用它来重新启动服务器场中的服务。我可以在批处理文件中列出每台服务器,但我只想重新启动已在运行的服务。例如,如果服务正在服务器场中的一台服务器上运行,则重新启动它,但如果它尚未运行,则让它停止。

有什么方法可以远程完成此操作吗?我没有与 SC 结婚,因为有另一个程序可以做到这一点。

答案1

这比 Izzy 的回答稍微冗长一些,但允许服务在“STOP_PENDING”状态下持续更长的时间。

假设命令行中指定的文本文件中的服务器格式为:

SERVERNAME1
SERVERNAME2
...

脚本如下:

@echo off
set SVC=ServiceName
if "%1"=="" goto end

for /f %%i in (%1) do call :do_bounce %%i
goto end

:do_bounce
rem Query for service running and bail if not
sc \\%1 query %SVC% | find "RUNNING"
if errorlevel 1 goto end

rem Stop the service and loop checking for it to stop
sc \\%1 stop %SVC%
:check_stopped
ping 127.0.0.1 -n 2 >NUL 2>NUL
sc \\%1 query %SVC% | find "STOPPED"
if errorlevel 1 goto check_stopped

rem Restart the service
sc \\%1 start %SVC%

:end

答案2

这个回答太粗俗了,让我很开心 :)

sc \\MyServer query MyRemoteService | find "RUNNING" && echo Service running - now stopping && sc \\MyServer stop MyRemoteService && ping 127.0.0.1 -n 10 && echo Now starting service && sc \\MyServer start MyRemoteService || echo Service not running

答案3

Powershell 2.0 有一个 Restart-Service 命令行

答案4

你可能想看看StackOverflow 上的这个问题

它提到了为什么您可能需要考虑从每台单独的机器进行监控(使用 Windows 服务监控工具),而不是依赖网络。

相关内容