我有一个从我的networking中的机器名列表,我已经放在一个batch file运行列表,并显示谁login到每个。
psloggedon \\machineA psloggedon \\machineB psloggedon \\machineC psloggedon \\machineD psloggedon \\machineE psloggedon \\machineF ...
Psloggedon工作正常,但是当它碰到一台机器,实际上并没有在networking上,它挂了好30 – 60秒,然后移动到下一台机器…我只是想知道是否有任何方法来加速这样做如果它碰到一台没有在networking上的机器,它会更快地移动到列表中的下一台机器上。
我已经在其他地方读过,通过在命令中添加一个ping -n循环,这可能是可能的,但是怎么做呢?
在你的情况下,使用ping命令是正确的。
Start.cmd
FOR /F %%x in (c:\temp\pclist.txt) do call ping_psloggedon.cmd %%x
ping_psloggedon.cmd
ping -n 1 -i 200 -w 130 %1 if errorlevel 1 goto exit c:\temp\pstools\psloggedon.exe \\%1 :exit
pclist.txt
PCNAME1 PCNAME2 PCNAME3
我不知道在Dos做这件事的方法。 把你可以使用自动获得一个“清除”列表。 http://www.autoitscript.com
安装Autoit然后你可以使用这个脚本。 你必须使用最新的psloggedon.exe(1.34)
将脚本保存为“NAME.au3”(NAME,你想要的)文件。
例:
C:\ NAME.au3
C:\ pclist.txt
C:\ pstools \ psloggedon.exe
#include <Constants.au3> Dim $line, $line2, $file, $icount, $reg, $reg2, $reg3 $file = FileOpen("pclist.txt", 0) While 1 $line = FileReadLine($file) If @error Then ExitLoop $reg3 = "" $reg2 = "" $reg = "" If Ping($line, 200) Then $reg = @ComSpec & ' /C "' & @ScriptDir & "\pstools\psloggedon.exe -l -x \\" & $line & '"' $reg = Run($reg, "", @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD) While 1 $reg2 = StdoutRead($reg) If @error Then ExitLoop If $reg2 Then $reg3 &= $reg2 EndIf WEnd If StringInStr($reg3, "Error") Then $reg = "Error" ElseIf StringInStr($reg3,"No one is logged") Then $reg = "No one is logged on locally." Else $reg = StringTrimLeft($reg3, StringInStr($reg3, Chr(13), "", 3)) $reg = StringTrimLeft($reg, StringInStr($reg, "\")) $reg = StringTrimRight($reg, StringLen($reg) - StringInStr($reg, Chr(13))) $reg = StringStripWS($reg, 8) EndIf $icount += 1 $line2 &= $icount & @TAB & $line & @TAB & $reg & @CRLF EndIf TrayTip("Psloggedon", $icount & " " & $line & " User: " & $reg, 10) WEnd FileClose($file) ConsoleWrite($line2) FileDelete("C:\output.txt") FileWrite("C:\output.txt", $line2) ShellExecute("C:\output.txt")
只需将>> c:\ output添加到c:\ temp \ pstools \ psloggedon.exe \%1
ping -n 1 -i 200 -w 130 %1 if errorlevel 1 goto exit c:\temp\pstools\psloggedon.exe \\%1 >> C:\output.txt :exit
现在,每次启动start.cmd时,结果都会添加到c:\ output.txt中
如果你想,你可以添加回声LoggedonUsers> C:\ output.txt start.cmd得到一个干净的output.txt在开始。
echo LoggedonUsers > c:\output.txt FOR /F %%x in (c:\temp\pclist.txt) do call ping_psloggedon.cmd %%x
你是什么意思“这也是ERRORLEVEL声明?”
再次感谢队友:)
这也很好! 有可能只输出机器名称的值? 而不是我目前在输出文件中获得的所有其他文本。
所以在output.txt目前它显示这个…
连接到\ LT013131的registry…
用户本地login:19/11/2010 09:08:05域名\ userid用户通过资源共享login:19/11/2010 11:44:17域名\ userid
无论如何,它只是通过列表,输出LT013131?
所以一旦脚本完成,我只是有一个机器名称列表..
谢谢 :)