Batch file 创建批处理文件以控制来自多个服务器的服务

Batch file 创建批处理文件以控制来自多个服务器的服务,batch-file,Batch File,我想创建一个.bat文件,该文件将为我提供在不同服务器之间进行选择和执行停止/启动服务等操作的选项。到目前为止,发生了系统错误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 ap

我想创建一个.bat文件,该文件将为我提供在不同服务器之间进行选择和执行停止/启动服务等操作的选项。到目前为止,发生了系统错误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>
如果需要,还可以向
SCHTASKS
命令传递用户和密码

应该清楚它是如何工作的。我建议仔细查看第一个bat文件。使用此选项:

SC \\%~1 Stop service
timeout 10
SC \\%~1 Start service
可能会引起麻烦。有时,由于各种原因,服务不会在10秒内停止。在服务尚未停止时尝试启动服务将导致错误,并且服务将保持停止状态


相反,计划任务中的bat脚本将尝试停止服务,然后等待5秒(是,-n6表示5秒^^),然后检查服务是否处于“已停止”状态。如果是,它将启动它,否则,它将重新尝试停止它,再等待5秒钟,以此类推。

感谢Michael的详细解释。这是非常有帮助的,工作如预期。我还有一个问题。我只是好奇,在我的代码中,为什么函数没有传递正确的参数。我希望在restart函数中传递“server name”,无论它在哪里显示\%~1。是否缺少任何内容。@user2410266可能的错误:在
net use\\%~1/行中,用户:%username%
应该有一个介于1和/之间的空格。当您跳过
netuse
命令时,它也可能起作用<代码>SC\\%~1停止服务-超时10-SC\\%~1启动服务可能已经执行了此任务。
SC \\%~1 Stop service
timeout 10
SC \\%~1 Start service