Câu trả lời:
Đây là nguồn ban đầu nhưng bây giờ là 404:
Họ đề nghị sử dụng WMIC (Lệnh giao diện quản lý Windows) có sẵn trên windows:
WMIC /NODE: xxx.xxx.xxx.xxx COMPUTERSYSTEM GET USERNAME
Sẽ trả lại tên người dùng hiện đang đăng nhập vào xxx.xxx.xxx.xxx hoặc
WMIC /NODE: "workstation_name" COMPUTERSYSTEM GET USERNAME
sẽ trả về tên người dùng hiện đang đăng nhập vào "workstation_name"
CẬP NHẬT: Điều này cũng sẽ hoạt động trên Windows 10 - nếu bạn là quản trị viên trên máy từ xa.
Xin lỗi, không nhận thấy bạn không muốn sử dụng Sysiternals.
Đó là một công cụ kỹ thuật của Microsoft, lý do cụ thể nào để không sử dụng nó?
Tôi đã ưu tiên Sysiternals hơn các công cụ bên thứ ba khác trước khi Mark Russinovich chuyển sang Microsoft.
Bộ phần mềm Microsoft Sysiternals có một công cụ có tên là Psloggedon ,
psloggedon.exe -l
Ngoài ra còn có NBTSTAT ,
nbtstat -a NetBIOS-Computer-NAme
WMIC
câu trả lời được chấp nhận phàn nàn rằng RPC không chạy. Đó là một con giun mới mà tôi không cảm thấy muốn mở ngay bây giờ, vì vậy tôi đã kiểm tra vào psloggedon và tôi khá hạnh phúc.
Tôi đã sử dụng win32_loggedonuser, nhưng gặp phải một vấn đề trong đó có nhiều hơn một người dùng tên miền được trả lại, vì vậy nó không hoạt động cho mục đích của tôi. Thay vào đó tôi đã sử dụng (In powershell)
#Get Currently logged in user
$ExplorerProcess = gwmi win32_process | where name -Match explorer
if($ExplorerProcess.getowner().user.count -gt 1){
$LoggedOnUser = $ExplorerProcess.getowner().user[0]
}
else{
$LoggedOnUser = $ExplorerProcess.getowner().user
}
nếu là vì đôi khi người nhận sẽ báo cáo nhiều hơn một người dùng vì một số lý do, không biết tại sao nhưng trong trường hợp của tôi, đó là cùng một người dùng nên đó không phải là vấn đề.
Bạn có thể lấy thông tin này từ win32_loggedonuser.
Từ trang này :
strComputer = "." ' " use "." for local computer
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSessions = objWMI.ExecQuery _
("Select * from Win32_LogonSession Where LogonType = 2 OR LogonType = 10")
If colSessions.Count = 0 Then
Wscript.Echo "No interactive users found"
Else
For Each objSession in colSessions
If objSession.LogonType = 2 Then
WScript.Echo "Logon type: Console"
Else
WScript.Echo "Logon type: RDP/Terminal Server"
End If
Set colList = objWMI.ExecQuery("Associators of " _
& "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _
& "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )
For Each objItem in colList
WScript.Echo "User: " & objItem.Name
WScript.Echo "FullName: " & objItem.FullName
WScript.Echo "Domain: " & objItem.Domain
Next
Wscript.Echo "Session start time: " & objSession.StartTime
WScript.Echo
Next
End If
UserName
" mà không có gì khác được liệt kê, mặc dù tôi đã đăng nhập vào máy đó.