psloggedon 超时

psloggedon 超时

我有一个来自我网络的机器名称列表,我将其放入批处理文件中以运行该列表并显示每台机器的登录者。

psloggedon \\machineA
psloggedon \\machineB
psloggedon \\machineC
psloggedon \\machineD
psloggedon \\machineE
psloggedon \\machineF
...

Psloggedon 运行正常,然而当它攻击一台实际上不在网络上的机器时,它会挂起 30 到 60 秒后才转到下一台机器...我只是想知道是否有任何方法可以加快速度,以便如果它攻击一台不在网络上的机器,它会更快地转到列表中的下一台机器。

我在其他地方看到过,通过在命令中添加 ping -n 循环可以实现这一点......但是该怎么做呢?

答案1

对于您来说,使用 ping 命令是正确的做法。

开始菜单

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文件

PCNAME1
PCNAME2
PCNAME3

答案2

我不知道如何在 Dos 中做到这一点。但是您可以使用 Autoit 来获取“清除”列表。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")

答案3

只需将 >> 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 中

如果您愿意,可以将 echo 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 语句吗?”你的意思是什么?

答案4

再次感谢你 :)

效果也很好!是否可以只输出机器名称的值?而不是我目前在输出文件中获得的所有其他文本。

因此在 output.txt 中当前显示这个...

正在连接到 \LT013131 的注册表...

本地登录的用户:19/11/2010 09:08:05 域名\用户ID 通过资源共享登录的用户:19/11/2010 11:44:17 域名\用户ID

有没有办法让它只运行列表并输出 LT013131?

因此,一旦脚本完成,我就会得到一份机器名称列表。

谢谢 :)

相关内容