Batch file 在不同的远程服务器上按特定顺序运行多个批处理文件

Batch file 在不同的远程服务器上按特定顺序运行多个批处理文件,batch-file,for-loop,windows-server-2008,remote-access,Batch File,For Loop,Windows Server 2008,Remote Access,我有一些批处理文件,需要在位于同一网络上的6台远程服务器上按以下顺序异步运行,所有服务器都有通用的用户名和密码登录。我已将Master.bat文件放在服务器5上 STEP1 :Run file1.bat on 4 different servers (Server1, Server2, Server3, Server4) in parallel STEP2 :Run file2.bat on 2 different servers (Server5, Server6) in

我有一些批处理文件,需要在位于同一网络上的6台远程服务器上按以下顺序异步运行,所有服务器都有通用的用户名和密码登录。我已将Master.bat文件放在服务器5上

STEP1 :Run file1.bat on 4 different servers (Server1, Server2, Server3, Server4) in parallel           
STEP2 :Run file2.bat on 2 different servers (Server5, Server6) in parallel                                                  
STEP3 :Run file3.bat on Server5 (which is local server in my case as Master.bat is on Server5 only )                                                                                      
STEP4 :Run file4.bat on 2 same servers as in STEP2 (Server5, Server6) in parallel                                   
STEP5 :Run file5.bat on 4 same servers as in STEP1 (Server1, Server2, Server3, Server4) in parallel  
我计划按如下方式进行:

Serverlist1.txt:

Server1 ip
Server2 ip
Server3 ip
Server4 ip
Server5 ip
Server6 ip
@echo off 
setlocal enabledelayedexpansion
for /F "delims= " %i in (C:\test\Serverlist1.txt) do ( psexec \\%i C:\test\file1.bat )
for /F "delims= " %i in (C:\test\Serverlist2.txt) do ( psexec \\%i C:\test\file2.bat )
call file3.bat
for /F "delims= " %i in (C:\test\Serverlist2.txt) do ( psexec \\%i C:\test\file4.bat )
for /F "delims= " %i in (C:\test\Serverlist1.txt) do ( psexec \\%i C:\test\file5.bat )
Serverlist2.txt:

Server1 ip
Server2 ip
Server3 ip
Server4 ip
Server5 ip
Server6 ip
@echo off 
setlocal enabledelayedexpansion
for /F "delims= " %i in (C:\test\Serverlist1.txt) do ( psexec \\%i C:\test\file1.bat )
for /F "delims= " %i in (C:\test\Serverlist2.txt) do ( psexec \\%i C:\test\file2.bat )
call file3.bat
for /F "delims= " %i in (C:\test\Serverlist2.txt) do ( psexec \\%i C:\test\file4.bat )
for /F "delims= " %i in (C:\test\Serverlist1.txt) do ( psexec \\%i C:\test\file5.bat )
Master.bat:

Server1 ip
Server2 ip
Server3 ip
Server4 ip
Server5 ip
Server6 ip
@echo off 
setlocal enabledelayedexpansion
for /F "delims= " %i in (C:\test\Serverlist1.txt) do ( psexec \\%i C:\test\file1.bat )
for /F "delims= " %i in (C:\test\Serverlist2.txt) do ( psexec \\%i C:\test\file2.bat )
call file3.bat
for /F "delims= " %i in (C:\test\Serverlist2.txt) do ( psexec \\%i C:\test\file4.bat )
for /F "delims= " %i in (C:\test\Serverlist1.txt) do ( psexec \\%i C:\test\file5.bat )
我还没有测试它,所以不确定Master.bat文件中的多个FOR循环是否会等待彼此完成?。我是否应该将这些FOR循环放在其他批处理文件中,然后在Master.bat中调用它们? 这对我来说似乎有点冗长。有什么简单的方法可以做到这一点吗? 需要帮助

EDIT1

file1.bat

taskkill /f /im firefox.exe
net stop W3SVC
sc config W3SVC start= demand
net start W3SVC
我想让file1.bat等到收到“SUCCESS”信号。我应该把
waitforsuccess
命令放在file1.bat文件的哪里

在上面的Master.bat文件中,我应该在其中插入
waitfor/SI SUCCESS
命令,以向file1.bat发送开始运行的信号


实际上,我必须为所有五个批处理文件定义不同的信号名称,以便我可以按照上面提到的5个步骤一个接一个地运行它们。

a。一个选项是在每台服务器上依次运行所有命令:例如:服务器1上的bat1、S2、S3、S4、S5上的bat2、S6等

b。如果选择a。不适合您,我看不到简单的解决方案:

  • 为每个步骤创建一个ServerlistX.txt文件(带有必要的服务器IP)
  • 设置步长=0
  • 第一步呼叫所有服务器
  • 监视所有服务器批处理是否成功完成。在这里,您可以设置特定的窗口名称,并使用
    tasklist/FI…
    命令按名称和窗口名称筛选进程,并关闭子窗口。检查之间的等待可以通过ping命令“
    pinglocalhost>nul
    ”来模拟。它将持续约3秒
  • 设置步骤=步骤+1
  • 检查步骤是否未超过最大值,如果是,则退出
  • 转到步骤3

  • 启动需要并行运行的批处理文件,在这些批处理中,使用waitfor命令等待启动信号,并从master send signal开始等待batchs.MC..但是我可以通过PSExec直接调用Start,比如<代码>对于/F“delims=“%i in(C:\test\list1.txt)do(psexec\\%i start C:\test\file1.bat)?…和MC,另外,我不知道如何为同一域上的一组服务器实现
    waitfor
    延迟。是否在批处理文件
    waitfor SUCCESS
    和主文件
    waitfor/s Server5/si SUCCESS
    中都可以完成这项工作?我不清楚根据您的建议,
    waitfor
    在我的情况下如何工作?是的,您可以使用psexec,这是一个不错的选择,但是master现在将等待批处理结束,或者将等待,直到一个批处理完成,其他批处理将不会开始。等待?使用psexec启动远程批处理,在这些批处理文件中,使用waitfor等待master发送开始工作的信号。因此,所有批处理文件都同时启动。如果您在waitfor中不使用/S,信号将通过domain.MC.发送。正如您上面所解释的。似乎我不需要在waitfor中使用
    /S时维护Serverlist1.txt和Serverlist2.txt。。。?如果信号是通过公共域发送的,那么这些服务器将自动识别启动的成功信号..?Mihai..感谢您的回复..但是选项b似乎使其更加复杂。