Определить, кто вошел в систему на удаленных машинах Windows


9

Как вы узнаете, кто вошел в систему на удаленных машинах Windows?

Сейчас я использую psloggedon , но он дает мне только один компьютер за раз.

psloggeon \\ 172.21.0.5

PsLoggedOn

Есть ли лучший способ, как сканировать всю подсеть? Желательно какое-то приложение с графическим интерфейсом.

Ответы:


9

не графический интерфейс, но:

for /L %x in (2,1,254) do psloggedon \\172.21.0.%x

сделает сканирование с 172.21.0.2-254. Вы также можете вложить:

for /L %z in (16,1,31) do for /L %x in (1,1,254)  do psloggedon \\172.21.%y.%x

Это просканирует подсети 172.21. {16-31} .x.


Хорошо, но проблема в том, что он пытается каждый IP-адрес. Если хост не активен, он вроде как висит там на 30 секунд или около того, прежде чем продолжить. Вывод немного грязный, а также.
Джиндрих

вы можете выполнить пинг против машины (ping xxxx -n 1) и проверить его вывод, таким образом, ваше время ожидания для любой машины составляет одну секунду для пинга
benPearce

8

Я нашел этот сценарий . Он сканирует весь домен и дает хороший вывод (имя компьютера и имя пользователя).

whoisloggedinwhere.bat> users.txt

@ эхо выключено
SETLOCAL
for / f "Tokens = 1" %% c in ('net view / domain: "% USERDOMAIN%" ^ | Findstr / L / C: "\\"') do (
 for / f "Tokens = *" %% u in ('PsLoggedOn -L %% c ^ | find / i "% USERDOMAIN% \"') do (
  вызов: сообщить %% c "%% u"
 )
)
Endlocal
Перейти к: EOF
: доклад
установить работу =% 1
set comp =% work: ~ 2%
установить пользователя =% 2
set user =% user: "=%
набор вызовов user = %% user: *% USERDOMAIN% \ = %%
@echo% comp%% user%

Этот скрипт использует PsLoggedOn .



2

Я записываю имя пользователя в свойство описания компьютера с помощью сценария входа, который позволяет мне видеть все в AD Users & Computers, выполнять поиск по нему и так далее. Очень кстати.


1

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

Start -> Administrative Tools -> Terminal Services Manager

1

qwinsta - это еще одна команда DOS, но она по-прежнему будет давать только одну команду за раз ...

C:\>qwinsta /server:test_srv
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 console           test_usr                  0  Active  wdcon
 rdp-tcp                                 65536  Listen  rdpwd

1

Вы можете обнаружить, что пользователь локально вошел на рабочую станцию, запросив WMI с помощью следующего сценария PowerShell. Он возвращает имя того, кто вошел в систему локально или пустую строку.

function logged_in($host_name) {
    (get-wmiobject -class Win32_ComputerSystem -computername $host_name `
        -namespace "root\CIMV2").UserName
}

0

Я не уверен, где я взял это, но у меня есть этот код, который показывает пользователей на машине. Вы можете обернуть это в каждый цикл для сканирования группы машин. Я бы сказал, что если вы хотите узнать, кто вошел в систему, самый простой способ - включить аудит входа в систему и посмотреть (или запросить) журнал безопасности. Вот код, чтобы увидеть, кто в данный момент:

' PARAMETERS
'
strComputer = "machineName"   ' use "." for local computer 
strUser = "domain\user" ' comment this line for current user
strPassword = "password" ' comment this line for current user

' CONSTANTS
'
wbemImpersonationLevelImpersonate = 3
wbemAuthenticationLevelPktPrivacy = 6

'=======================================================================
' MAIN
'=======================================================================

' Connect to machine
'
If Not strUser = "" Then

    ' Connect using user and password
    '
    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMI = objLocator.ConnectServer _
        (strComputer, "root\cimv2", strUser, strPassword)
    objWMI.Security_.ImpersonationLevel = wbemImpersonationLevelImpersonate
    objWMI.Security_.AuthenticationLevel = wbemAuthenticationLevelPktPrivacy

Else

    ' Connect using current user
    '
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 

End If

' Get OS name
'
Set colOS = objWMI.InstancesOf ("Win32_OperatingSystem")

For Each objOS in colOS
    strName = objOS.Name
Next

If Instr(strName, "Windows 2000") > 0 Then

    '-------------------------------------------------------------------
    ' Code for Windows 2000
    '-------------------------------------------------------------------

    ' Get user name
    '
    Set colComputer = objWMI.ExecQuery("Select * from Win32_ComputerSystem")

    For Each objComputer in colComputer
        Wscript.Echo "User: " & objComputer.UserName
    Next

    ' ------------------------------------------------------------------

Else

    ' ------------------------------------------------------------------
    ' Code for Windows XP or later
    ' ------------------------------------------------------------------

    ' Get interactive session
    '
    Set colSessions = objWMI.ExecQuery _ 
          ("Select * from Win32_LogonSession Where LogonType = 2") 

    If colSessions.Count = 0 Then 
        ' No interactive session found
        '
        Wscript.Echo "No interactive user found" 
    Else 
        'Interactive session found
        '
        For Each objSession in colSessions 

            Set colList = objWMI.ExecQuery("Associators of " _ 
            & "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _ 
            & "Where AssocClass=Win32_LoggedOnUser Role=Dependent" ) 

            ' Show user info
            '
            For Each objItem in colList 
                WScript.Echo "User: " & objItem.Name 
                WScript.Echo "FullName: " & objItem.FullName 
                WScript.Echo "Domain: " & objItem.Domain 
            Next 

            ' Show session start time
            '
            Wscript.Echo "Start Time: " & objSession.StartTime 
        Next 
    End If 

    ' ------------------------------------------------------------------

End If

'=======================================================================

0

Я удивлен, что никто еще не упомянул loggedon2, которым я пользуюсь уже несколько лет. Это реализация GUI, о которой вы просили, и она доступна здесь .


Когда я запускаю это в Windows 7, я получаю сообщение об ошибке: Ошибка - Выход. Не удалось найти точку входа для ServerBrowseDialogA0. Возможно, он не работает на Win7? Вам нужны права администратора для запуска без ошибок?
Стив

@ Стив, теперь я знаю, почему никто не опубликовал это. Вы правы, это не работает на Win 7, по крайней мере, на 64-битной версии. Я собираюсь посмотреть, смогу ли я скопировать необходимые библиотеки DLL с компьютера с XP и заставить его работать. Я дам вам знать, если у меня будет успех.
Джон Гарденье
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.