Визначте, хто ввійшов у систему на віддалених машинах Windows


9

Як дізнатися, хто ввійшов у систему на віддалених машинах Windows?

Наразі я використовую psloggedon , але він дає мені лише один комп'ютер за один раз.

психлог \\ 172.21.0.5

плоггедон

Чи є кращий спосіб сканування всієї підмережі? Переважно деякі програми GUI.

Відповіді:


9

не GUI, але:

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

@echo off
сетлокальні
для / f "Токени = 1" %% c in ('чистий перегляд / домен: "% USERDOMAIN%" ^ | Findstr / L / C: "\\"') do (
 для / f "Tokens = *" %% u in ('PsLoggedOn -L %% c ^ | find / i "% USERDOMAIN% \"') do (
  виклик: доповідь %% c "%% u"
 )
)
ендокалі
goto: EOF
: доповідь
встановити роботу =% 1
встановити комп =% робота: ~ 2%
встановити користувача =% 2
set user =% user: "=%
користувач набору викликів = %% користувач: *% USERDOMAIN% \ = %%
@echo% comp%% user%

Цей сценарій використовує PsLoggedOn .



2

Я записую ім’я користувача у властивість опису комп'ютера за допомогою сценарію входу, який дозволяє мені бачити все в AD Users & Computers, здійснювати пошук по ньому тощо. Дуже зручно.


1

Якщо сервери виконують служби Terminal Services, ви можете використовувати Terminal Services Manager для перегляду серверів у домені та тих, хто в них увійшов. Це графічний інтерфейс і його можна знайти в розділі

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? Вам потрібні права адміністратора, щоб запустити його без помилок?
Стів

@Steve, тепер я знаю, чому ніхто більше не публікував це. Ви маєте рацію, він не працює на Win 7, принаймні, не на 64-бітній версії. Я перегляну, чи можу я скопіювати потрібні DLL-файли з машини XP і змусити її працювати. Я дам вам знати, чи маю я успіх.
John Gardeniers
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.