psloggedon超时

我有一个从我的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?

所以一旦脚本完成,我只是有一个机器名称列表..

谢谢 :)