psloggedon timeout

1

Eu tenho uma lista de nomes de máquinas da minha rede que coloquei em um arquivo batch para percorrer a lista e mostrar quem está logado em cada um.

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

Psloggedon funciona bem, mas quando chega a uma máquina que não está realmente na rede, ela fica pendurada por uns bons 30 a 60 segundos antes de passar para a próxima máquina ... Eu estava pensando se havia alguma maneira de acelerar isso de modo que, se ela atingir uma máquina que não esteja na rede, ela será movida para a próxima máquina na lista com muito mais rapidez.

Eu li em outros lugares que isso poderia ser possível adicionando um loop ping -n no comando ... mas como?

    
por user60707 18.11.2010 / 12:36

4 respostas

1

No seu caso, seria a coisa certa usar o comando 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
    
por 18.11.2010 / 17:30
1

Eu não sei como fazer isso em Dos. Coloque você pode usar Autoit para obter uma lista "clara". link

Instale o Autoit, então você pode usar este script. Você tem que usar o mais novo psloggedon.exe (1.34)

Salve o script como "NAME.au3" (NOME o que você quiser) arquivo.

Exemplo:

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")
    
por 19.11.2010 / 13:12
0

Basta adicionar > > c: \ output para 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

Agora, toda vez que você iniciar o start.cmd, os resultados serão adicionados a c: \ output.txt

Se você quiser, pode adicionar echo LoggedonUsers > c: \ output.txt para start.cmd para obter um output.txt limpo no início.

echo LoggedonUsers > c:\output.txt
FOR /F %%x in (c:\temp\pclist.txt) do call ping_psloggedon.cmd %%x

O que você quer dizer com "Isso também seria uma declaração ERRORLEVEL?"

    
por 19.11.2010 / 11:15
0

Obrigado mais uma vez mate:)

Isso também funciona bem! é possível produzir apenas o valor do nome da máquina? ao contrário de todos os outros textos que eu atualmente recebo no arquivo de saída ..

Portanto, no output.txt atualmente ele exibe isso ...

Conectando-se ao registro de \ LT013131 ...

Usuários conectados localmente:      19/11/2010 09:08:05 nome de domínio \ userid Usuários conectados via compartilhamentos de recursos:      19/11/2010 11:44:17 nome de domínio \ userid

Existe de qualquer maneira para que apenas passe pela lista e produza apenas LT013131 ?

Então, assim que o script for concluído, eu teria apenas uma lista de nomes de máquinas.

Obrigado :)

    
por 19.11.2010 / 12:47