2012-04-20 58 views
0

这里是我的伪:远程服务检查批处理文件不太工作

Read from LIST 
Ping to check if machine is awake | Report result 
Check to see if SERVICE is running | Report result 
    NO? Is it stopped? 
    YES? Run it | Report result 
    NO? Must not be installed, remote install please! | Report result 

这快把我逼疯这里...我可以使此代码工作的单独的部分就好了,但是当我结合起来到一个嵌套的IF结构,如果一台机器没有运行服务,它会返回'网络错误'和'运行'...然后在该机器上进行手动检查显示它仍然实际停止。对于没有安装服务的机器也是如此。请告诉我我在哪搞乱了。谢谢!

@echo off 
echo. 
echo. 
cls 
set SERVICE=MyServ 


for /f %%i in (\\127.0.0.1\c$\list.txt) do call :DOIT %%i 




:DOIT 
echo Checking %SERVICE% on %1 
@ECHO off 
ping -n 2 -w 1000 %1 >trial.txt 
find "Reply from" trial.txt>nul 
if %ERRORLEVEL% == 1 (echo %1 Network Unresponsive>> "\\127.0.0.1\c$\list_report.txt") 
if %ERRORLEVEL% == 0 (
    sc \\%1 query %SERVICE% | FIND "STATE" | FIND "RUNNING" 
    if %ERRORLEVEL% == 0 (echo %1 Running>> "\\127.0.0.1\c$\list_report.txt") 
    if not %ERRORLEVEL% == 0 (
     sc \\%1 query %SERVICE% | FIND "STATE" | FIND "STOPPED" 
     if %ERRORLEVEL% == 0 (
      sc \\%1 start %SERVICE% 
      echo %1 forced start>> "\\127.0.0.1\c$\list_report.txt"" 
     ) 
     if not %ERRORLEVEL% == 0 (
      xcopy /f /y "\\127.0.0.1\!\theAPP.exe" "\\%1\c$\temp\" 
      \\127.0.0.1\!\psexec \\%1 -s -n 10 -d cmd /c "c:\temp\theAPP.exe" 
      echo %1 Installed>> "\\127.0.0.1\c$\list_report.txt"" 
     ) 
    ) 
) 
+0

清理代码abit ..任何人都看到问题? – 2012-04-20 15:52:42

回答

1

这样就可以解决问题的问题

for /f %%i in (\\127.0.0.1\c$\list.txt) do call :DOIT %%i 

:DOIT 
    if not "%1"=="" (
     echo Checking %SERVICE% on %1 
     echo. 
     ping -n 2 -w 1000 %1 | find "Reply from" >nul 
      if ERRORLEVEL 1 echo %1 Network Unresponsive>> \\127.0.0.1\c$\list_report.txt else (
       sc \\%1 query %SERVICE% | find "RUNNING" > nul 
        if ERRORLEVEL 1 (
          sc \\%1 start %SERVICE% > nul 
          echo %1 Forced Start>> \\127.0.0.1\c$\list_report.txt     
        ) else (
         echo %1 Running>> \\127.0.0.1\c$\list_report.txt) 
        xcopy /f /y \\127.0.0.1\c$\text.txt \\%1\c$\temp\ > nul 
        \\127.0.0.1\c$\psexec \\%1 -s -n 10 -d cmd /c "type c:\temp\text.txt" 
        echo %1 Installed>> "\\127.0.0.1\c$\list_report.txt") 
      ) 
    ) 

的部分是,你必须测试,如果没有%1 =“”在脚本的顶部。那就是你得到错误文本的地方..

然后你有一些嵌套问题,所以我用ELSE代替。

你将不得不到的text.txt更改为您的文件名.exe(和省略“类型”命令)

请检查答案,如果这

仅供参考解决您的问题,您将需要有在远程机器上的管理员访问,以便您可以打开和关闭服务

+0

谢谢,会尝试。但是,一目了然...... xcopy和psexec部分只应在运行服务失败或停止时运行。 {如果service!=正在运行} AND {service!=已停止},那么该应用程序一定不能安装,复制并安装它。 你给的例子看起来像它将安装,如果它没有运行,但不检查它是否刚刚停止... – 2012-04-20 17:18:41

+0

好吧,试过了。它运行第一台计算机。然后关闭批处理文件...输出显示正在运行,因为第一台测试机正在运行... – 2012-04-20 17:32:33

+0

Alrighty。使用你的例子,我能够以一种工作形式获得我的原始脚本!看起来像是有一个)失踪。如果没有运行,也包含我的安装。非常感谢! – 2012-04-20 19:37:54