Câu trả lời:
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ô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 .
Thử nbtstat -a <computername>
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.
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
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
}
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
'=======================================================================
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 .