2013-02-20 90 views
0

餘米使用PSEXEC自動運行如何輸出某個進程正在運行的PC名稱?

get.bat


任務列表| FINDSTR pmill.exe >> DC-01 \ C $ \ 0001.txt


run_get.bat


PSEXEC @%1 -u管理員-p密碼-c「C:\ GET .BAT」


pclist.txt


在我們的網絡上的所有電腦,

我怎樣才能得到與PC名稱而不是隻有pmill.exe在文本文件中的結果? 反正我可以從powershell做到嗎? 我需要在結果中獲得pc名稱。 提示plz!

回答

2

相反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. 
    ) 
) 
+0

OK,我可以嘗試WMIC,但我仍然必須使用psexec在所有PC上自動運行。 – Blitzcrank 2013-02-20 15:07:55

+0

btw,2> nul是什麼意思? – Blitzcrank 2013-02-20 15:15:38

+1

'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

相關問題