0
@echo off
:begin
for /f %%a in (computerlist.txt) do (
  setlocal
  psexec \\%%a -u user -p password -i -d "d:\path\command.exe"
  endlocal
)

スクリプトが実行されているとき、マシンが到達不能であることがわかったとき、私はそれをスキップしたいと思います。

到達不能なコンピューターをスキップして、txtファイル内の次のコンピューターに進むスクリプトを作成するにはどうすればよいですか?

4

2 に答える 2

0

マシンがping可能かどうかを確認する簡単なテストはどうですか?

@echo off
setlocal
:begin
for /f %%a in (computerlist.txt) do (
    ping -n 1 %%a >NUL 2>NUL
    if %errorlevel%==0 (
        psexec \\%%a -u user -p password -i -d "d:\path\command.exe"
    ) else echo Skipping unreachable host %%a
)
endlocal
于 2013-02-13T01:28:43.500 に答える
0

実際、Windows ping.exeは意味のあるエラーレベルを返しません(え?)
IPプロトコルスタック自体がホースで接続されていない限り、常に「0」のエラーレベルを返します。

やらなければならないことは、pingの出力をtxtファイルにパイプし、TTL=を「検索」することです

ping10.10.10.10。> pingtest.txt
findstr / C: "TTL =" pingtest.txt> nul
if%ERRORLEVEL%equ 0(何でもする)else(echo skipping unreachable host "whatever")

次に、Find.exeまたはFindstr.exeを使用して、出力ファイルでTTL =を検索します
(findとfindstrはどちらも、検索対象を「検索」するときに「0」エラーレベルを使用することに注意してください)
。理由はありますが、「TTL=」は常に成功したping2の一部です
。最初の1つまたは2つで問題が発生することがあるため、常に少なくとも-nを3回pingします。これにより、成功する可能性を高めることができます。スキップしてください。
3.これを機能させるには、上記のFORループメソッドを使用する必要があります。生のpsexec.exeには、テキストファイルから呼び出されたターゲットをテスト/スキップする現在の手段がありません。
4. psexecセッションでネットワークリソースを使用する必要がある場合は、「-h」オプションを実行して、ドライブをマップできる昇格されたトークンを取得する必要があります。

これがお役に立てば幸いです。

于 2014-12-02T08:00:23.507 に答える