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""
        )
    )
)
4

1 に答える 1

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 を filename.exe に変更する必要があります (「type」コマンドを省略します)。

これで問題が解決する場合は、回答を確認してください

参考までに、サービスをオンまたはオフにできるように、リモート マシンで管理者アクセス権が必要です。

于 2012-04-20T16:28:17.820 に答える