创建一个批处理文件以从多个服务器控制服务



我想创建一个.bat文件,该文件将为我选择在不同的服务器之间选择并执行诸如Stop/Start Services之类的操作。到目前为止,我已经发生了系统错误67。找不到网络名称。有一个更好的方法吗。还是可以从弹出选项中选择服务器名称。

@ECHO OFF
CLS
ECHO 1.server1
ECHO 2.server2
ECHO 3.server3
ECHO 4.server4
ECHO.
set /p server_name=Enter server name:
IF %server_name%== 1 GOTO app1
IF %server_name%== 2 GOTO app2
IF %server_name%== 3 GOTO app3
IF %server_name%== 4 GOTO app4
:app1
call:restart "server1"
GOTO End
:app2
 call:restart "server2"
 GOTO End
:app3
 call:restart "server3"
 GOTO End
:app4
call:restart "server4"
GOTO End
:restart
net use \%~1/User:%username%
SC \%~1 Stop service
timeout 10
SC \%~1 Start service
GOTO End

而不是调试文件,我想向您展示一个不同的解决方案:

在您要重新启动服务的服务器上创建此BAT文件:

@ECHO OFF
:STOP
SC STOP <your_service>
ping 127.0.0.1 -n 6 > nul
SC QUERY <your_service> | find /I "STATE" | find "STOPPED"
if errorlevel 1 goto :STOP    
SC START <your_service>

现在,使用任务调度程序在服务器任务上创建。不要设置任何触发器,而要使任务执行您新创建的BAT文件。选择您需要的任何选项(例如具有特定密码的特定用户,是否在没有人登录时运行脚本,是否使用Admin Priveledges进行运行,等等)并给它命名(Your_task)。

最后,这样修改您的脚本:

@ECHO OFF
CLS
ECHO 1.server1
ECHO 2.server2
ECHO 3.server3
ECHO 4.server4
ECHO.
:SELECT
set /p server_name=Enter server name:
IF %server_name%==1 GOTO app1
IF %server_name%==2 GOTO app2
IF %server_name%==3 GOTO app3
IF %server_name%==4 GOTO app4
GOTO SELECT
:app1
SCHTASKS /RUN /S "server1" /TN "your_task"
GOTO End
:app2
SCHTASKS /RUN /S "server2" /TN "your_task"
GOTO End
:app3
SCHTASKS /RUN /S "server3" /TN "your_task"
GOTO End
:app4
SCHTASKS /RUN /S "server4" /TN "your_task"
GOTO End
:End

如果需要,您也可以将用户和密码传递给SCHTASKS命令。

应该很清楚它是如何工作的。我建议仔细查看第一个蝙蝠文件。使用以下方式:

SC \%~1 Stop service
timeout 10
SC \%~1 Start service

可能会引起麻烦。有时服务不会在10秒内停止各种原因。试图在尚未停止服务的情况下启动该服务,将导致错误,并且该服务将继续停止。

相反,我们在计划任务中的BAT脚本将尝试停止服务,然后等待5秒(是,-n 6表示5秒^^),然后检查服务是否具有状态"停止"状态。如果是这样,它将开始它,否则,将重新尝试停止它,等待5秒钟等。

最新更新