0

現在、/24 サブネット上のすべてのホストに ping を実行するスクリプトを作成し、オンラインのマシンで psexec を実行する別のスクリプトを実行しています。ping スイープ スクリプトは ping.bat と呼ばれ、マシン上で psexec を実際に実行する他のスクリプトは deploy_mir.bat と呼ばれます。リモート ホストで deploy_mir.bat を実行するだけで、問題なく実行できます。

私が抱えている問題は、それ自体がループを含む mir.bat が実行されるたびに、cmd ウィンドウに psexec のヘルプ情報が表示されることです。私が知る限り、mir.bat 内のループが実行されるたびに cmd ウィンドウが psexec のヘルプ情報でいっぱいになるという厄介な事実を除けば、すべてが正常に機能していると言えます。とにかくこれを引き起こすというわけではありません。

迅速な修正を望んでいますが、回答を得るために私のコードが必要な場合は、それを投稿してください。

とにかくコードを投稿する...

@echo on

setlocal EnableDelayedExpansion

set /p ipAddress="enter ip address: "

for /l %%i in (1,1,255) do (
ping -n 1 %ipAddress%.%%i | find "TTL" > nul

if !errorlevel! == 0 (
call deploy_mir.bat %ipAddress%.%%i
)
)

endlocal

deploy_mir.bat コード

@ECHO OFF

echo "Mir Agent deployment to: %1"


rem net use T: \\%1\C$ /user:administrator "password"
net use T: \\%1\C$ /user:administrator "username"

copy /y conf.xml T:\WINDOWS\
copy /y setup_mir.bat T:\WINDOWS\
net use t: /delete

rem psexec \\%1 -i -u administrator -p "password" c:\windows\setup_mir.bat
psexec \\%1 -i -u administrator -p "username" c:\windows\setup_mir.bat

deploy_mir.bat を実行したときの望ましいコマンド ラインの結果

C:\DOCUME~1\socuser2\MIR>deploy_mir.bat 10.180.145.66
"Mir Agent deployment to: 10.180.145.66"
The command completed successfully.

        1 file(s) copied.
        1 file(s) copied.
        1 file(s) copied.
t: was deleted successfully.


PsExec v1.94 - Execute processes remotely
Copyright (C) 2001-2008 Mark Russinovich
Sysinternals - www.sysinternals.com


c:\windows\setup_mir.bat exited on 10.180.145.66 with error code 0.

C:\DOCUME~1\socuser2\MIR>
4

2 に答える 2

1

ただの提案です。問題が解決するかどうかはわかりませんが、いくつかのガイダンスを提供する場合があります。

私の最初のステップは、call deploy_mir.bat %ipAddress%.%%i という行の代わりに、いくつかのテスト バッチ ファイルで psexec を明示的に呼び出すことによる小さなテストです。ヘルプ メッセージが表示されない場合、deploy_mir.bat は独自に検索を行うため、同じ行 call deploy_mir.bat %ipAddress%.%%i の代わりにコンテンツを明示的に配置してみてください。それが機能する場合は、交換した上記の行に問題があります。dos / batch は、こ​​のコード行からサブシェルを開き、そのコードをそのスコープで実行すると思います。それが問題を引き起こしている可能性があります。提供された情報で推測するだけです。

コード固有の注意:

@echo は有効になっていますが、あなたの質問にはないと言っています。!エラーレベル! == 0 は !エラーレベル! 式 0

一般的な注意事項:

通常、バッチ スクリプトにパラメーターを引用符で囲んで渡し、バッチ スクリプト%~1内で一度引用符を削除していました。if 条件についても同様に、!someVar! == a は、someVar が設定されていないか空である場合にスローしてエラーになりますが、"!someVar!" == "a" は、if 条件の基準を適切に満たしていません。

于 2012-04-30T14:58:12.187 に答える
0

ループの外側から呼び出されたときになぜ機能するのかわかりません。しかし、psexecdeploy_mir.bat の行にはcmd /c.

psexec \\%1 -i -u administrator -p "username" cmd /c c:\windows\setup_mir.bat
于 2012-04-30T19:01:42.667 に答える