Phát hiện ai đã đăng nhập vào máy Windows từ xa


9

Làm thế nào để bạn tìm ra ai đã đăng nhập vào máy windows từ xa?

Hiện tại tôi đang sử dụng psloggedon , nhưng nó chỉ cung cấp cho tôi một máy tính mỗi lần.

psloggeon \\ 172,21.0.5

psloggedon

Có cách nào tốt hơn để quét toàn bộ mạng con không? Tốt nhất là một số ứng dụng GUI.

Câu trả lời:


9

không phải là GUI, nhưng:

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

sẽ thực hiện quét từ 172,21.0.2-254. Bạn cũng có thể làm tổ:

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

Điều này sẽ quét các mạng con 172,21. {16-31} .x.


Tốt, nhưng vấn đề là nó thử mọi địa chỉ IP. Nếu một máy chủ không hoạt động, nó sẽ treo ở đó trong 30 giây hoặc lâu hơn trước khi nó tiếp tục. Đầu ra là một chút lộn xộn là tốt.
Jindrich

bạn có thể thực hiện ping với máy (ping xxxx -n 1) và kiểm tra đầu ra của nó, theo cách đó thời gian chờ của bạn đối với bất kỳ máy nào là một giây cho ping
benPearce

8

Tôi tìm thấy kịch bản này . Nó quét toàn bộ một tên miền và cung cấp cho bạn một đầu ra đẹp (tên máy tính và tên người dùng).

whoisloggedinwhere.bat> users.txt

@echo tắt
đặt mục tiêu
cho / f "Mã thông báo = 1" %% c trong ('chế độ xem mạng / tên miền: "% USERDOMAIN%" ^ | Findstr / L / C: "\\"') do (
 cho / f "Mã thông báo = *" %% u trong ('PsLoggedOn -L %% c ^ | find / i "% USERDOMAIN% \"') làm (
  gọi: báo cáo %% c "%% u"
 )
)
nội địa
goto: EOF
:báo cáo
đặt công việc =% 1
đặt comp =% công việc: ~ 2%
đặt người dùng =% 2
đặt người dùng =% người dùng: "=%
thiết lập cuộc gọi người dùng = %% người dùng: *% USERDOMAIN% \ = %%
@echo% comp %% người dùng%

Kịch bản này sử dụng PsLoggedOn .



2

Tôi viết tên người dùng vào thuộc tính mô tả máy tính bằng cách sử dụng tập lệnh đăng nhập, cho phép tôi xem mọi thứ trong AD Users & Computer, thực hiện tìm kiếm trên đó, v.v. Rất tiện dụng.


1

Nếu các máy chủ đang chạy Dịch vụ đầu cuối, bạn có thể sử dụng Trình quản lý dịch vụ đầu cuối để xem các máy chủ trong một miền và ai đã đăng nhập vào chúng. Nó là GUI và có thể được tìm thấy dưới

Start -> Administrative Tools -> Terminal Services Manager

1

qwinsta là một lệnh dos khác, nhưng nó sẽ vẫn chỉ cung cấp cho bạn một lần ...

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

1

Bạn có thể phát hiện người dùng đang đăng nhập cục bộ vào máy trạm bằng cách truy vấn WMI thông qua tập lệnh PowerShell sau. Nó trả về tên của bất cứ ai được đăng nhập cục bộ hoặc chuỗi trống.

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

0

Tôi không chắc chắn nơi tôi đã nhận nó nhưng tôi có mã này nằm xung quanh hiển thị người dùng trên máy. Bạn có thể gói cái này trong mỗi vòng để quét một loạt các máy. Tôi sẽ nói rằng nếu bạn muốn biết ai đã đăng nhập vào hệ thống, cách đơn giản nhất là bật kiểm toán đăng nhập và xem (hoặc truy vấn) nhật ký bảo mật. Đây là mã để xem ai đang ở bất kỳ thời điểm nào:

' 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

Tôi ngạc nhiên không ai đề cập đến logon2, mà tôi đã sử dụng trong một vài năm. Đó là việc triển khai GUI mà bạn yêu cầu và có sẵn ở đây .


Khi tôi chạy cái này trên Windows 7, tôi nhận được lỗi: Lỗi - Thoát. Không thể tìm thấy điểm vào cho ServerBrowseDialogA0. Có lẽ nó không chạy trên Win7? Bạn có cần quyền quản trị để chạy nó mà không có lỗi?
Steve

@Steve, bây giờ tôi biết tại sao không ai đăng nó. Bạn nói đúng, nó không hoạt động trên Win 7, ít nhất không phải là phiên bản 64 bit. Tôi sẽ xem liệu tôi có thể sao chép các DLL cần thiết từ máy XP và để nó hoạt động không. Tôi sẽ cho bạn biết nếu tôi có bất kỳ thành công.
John Gardeniers
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.