Назад | Перейти на главную страницу

время ожидания пслоггдона

У меня есть список имен машин из моей сети, которые я поместил в пакетный файл, чтобы просмотреть список и показать мне, кто вошел в каждый из них.

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

Psloggedon работает нормально, однако, когда он попадает на машину, которая на самом деле не в сети, он зависает на добрых 30-60 секунд, прежде чем перейти на следующую машину ... Мне просто интересно, есть ли способ ускорить это, чтобы если он попадает на машину, не подключенную к сети, она намного быстрее перемещается на следующую машину в списке.

Я читал в других местах, что это возможно, добавив в команду цикл ping -n ... но как?

Я не знаю, как это сделать в Dos. Положите вы можете использовать Autoit, чтобы получить "чистый" список. http://www.autoitscript.com

Установите Autoit, тогда вы сможете использовать этот скрипт. Вы должны использовать последнюю версию psloggedon.exe (1.34)

Сохраните скрипт как файл «NAME.au3» (ИМЯ, как хотите).

Пример:

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")

В вашем случае было бы правильно использовать команду 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

Просто добавьте >> 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 заявлением?"

Еще раз спасибо дружище :)

Это тоже хорошо работает! можно ли вывести только значение имени машины? в отличие от всего остального текста, который я сейчас получаю в выходном файле ..

Итак, в output.txt в настоящее время отображается это ...

Подключение к реестру \ LT013131 ...

Пользователи вошли в систему локально: 19.11.2010 09:08:05 имя домена \ идентификатор пользователя Пользователи, вошедшие в систему через общие ресурсы: 19.11.2010 11:44:17 имя домена \ идентификатор пользователя

Есть ли вообще так, чтобы он просто пробегал по списку и выводил только LT013131?

Итак, как только сценарий завершится, у меня будет просто список имен машин ...

Спасибо :)