it-swarm-vi.tech

Làm thế nào để kiểm tra ai hiện đang đăng nhập vào máy trạm windows từ dòng lệnh?

Môi trường nằm trong miền, máy chủ là Windows Server 2003, máy trạm có Vista và XP được cài đặt.
[.___.

Cảm ơn

37
Andrija

Đây là nguồn gốc 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ả lại 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.

47
Preet Sangha

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 đây Đánh dấu Nga chuyển vào Microsoft.


Microsoft Sysiternals Suite có một công cụ gọi là Psloggedon ,

psloggedon.exe -l

Ngoài ra còn có NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme
17
nik

Tôi đã sử dụng win32_loggedonuser, nhưng gặp phải một vấn đề trong đó 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 đề.

12
MDMoore313

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
6
HK_