相反PSEXEC的,试试这个:
@echo off
setlocal enabledelayedexpansion
for /f %%I in (pclist.txt) do (
set /p q="Checking %%I... "<NUL
ping -n 1 -w 500 %%I>NUL 2>NUL
if !errorlevel!==1 (
echo Offline.
) else (
wmic /node:%%I /user:adminuser /password:pass process where name="pmill.exe" get csname 2>NUL | find /i "%%I" >>dc-01\c$\0001.txt
echo Done.
)
)
那将输出%computername%
如果pmill.exe运行,或没有其他。
编辑:
如果你必须使用psexec
,那么我建议改变你for
循环调用psexec
逻辑,这样的事情:
@echo off
setlocal enabledelayedexpansion
for /f %%I in (pclist.txt) do (
set pc=%%I
set /p q="Checking %%I... "<NUL
ping -n 1 -w 500 %%I>NUL 2>NUL
if !errorlevel!==1 (
echo Offline.
) else (
for /f %%z in ('psexec \\!pc! -u adminuser -p pass tasklist 2^>^&1 ^| findstr /i "pmill.exe"') do (
set /p q="pmill.exe found. "<NUL
echo !pc!>>dc-01\c$\0001.txt
)
echo Done.
)
)
OK,我可以尝试WMIC,但我仍然必须使用psexec在所有PC上自动运行。 – Blitzcrank 2013-02-20 15:07:55
btw,2> nul是什么意思? – Blitzcrank 2013-02-20 15:15:38
'2> NUL'表示将stderr重定向到黑洞。没有很好的理由,'wmic'通过stderr输出换行符。 '2> NUL'压扁它们。在我更新的'psexec'示例中,'2>&1'将stderr重定向到stdout。有关更多信息,请参阅[使用命令重定向运算符](http://technet.microsoft.com/zh-cn/library/bb490982.aspx)。 – rojo 2013-02-20 15:18:42