使用psexec的dos批处理脚本每次循环时都会显示“帮助”文本

时间:2012-04-30 13:37:01

标签: batch-file dos psexec

目前正在编写一个脚本来ping / 24子网上的每个主机,然后执行另一个脚本,该脚本在那些在线的机器上运行psexec。 ping扫描脚本称为ping.bat,而在机器上实际运行psexec的另一个脚本称为deploy_mir.bat。我可以在远程主机上运行deploy_mir.bat,它运行没问题。

我遇到的问题是每次运行mir.bat时,它本身都包含一个循环,它将在cmd窗口中显示psexec的帮助信息。据我所知,一切都运行正常,除了令人讨厌的事实,每次mir.bat内部循环运行我的cmd窗口时都会填充psexec的帮助信息。我没有启用@echo,而不是它会导致这种情况。

希望快速解决问题,但是如果需要我的代码才能得到答案。

无论如何都要发布代码......

@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所需的cmd行结果

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>

2 个答案:

答案 0 :(得分:1)

只是一个建议。不确定它是否能解决您的问题,但可能会提供一些指导:

我的第一步是通过在某个测试批处理文件上显式调用psexec代替行调用deploy_mir.bat%ipAddress%。%% i进行的小测试。如果没有出现帮助消息,因为deploy_mir.bat可以自行查找,请尝试显式放置它的内容来代替同一行调用deploy_mir.bat%ipAddress%。%% i。如果这样可行,那么我们一直在替换的那条线上存在一些问题。我相信dos / batch将从这行代码中打开一个子shell并在该范围内运行它的代码。这可能会导致问题。只是猜测提供的信息。

特定代码注释:

@echo已启用,但您说它不在您的问题中。   !错误级别! == 0应该是!errorlevel! EQU 0

一些一般性说明:

通常,我曾经将参数传递给引号中的批处理脚本,然后在批处理脚本中删除带%~1的引号。同样适用于if条件,如!someVar!如果someVar未设置/为空,则== a将抛出错误,而“!someVar!” ==“a”将优雅地不符合if条件的标准。

答案 1 :(得分:0)

我不知道为什么它从循环外部调用时有效。但是deploy_mir.bat中的psexec行应该有cmd /c

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