我目前正在使用以下 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 服务监控工具),而不是依赖网络。