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?


37

Môi trường là trong miền, máy chủ là Windows Server 2003, máy trạm đã cài đặt Vista và XP.
Tôi cần cách kiểm tra từ xa những người hiện đang đăng nhập trên máy trạm, tốt nhất là từ một số dòng lệnh đơn giản và không có hệ thống bên ngoài hoặc chương trình của bên thứ ba.

Cảm ơn

Câu trả lời:


47

Đâ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.


Khi tôi chạy lệnh này từ xa hoặc cục bộ, tôi chỉ nhận được một dòng đầu ra duy nhất " UserName" mà không có gì khác được liệt kê, mặc dù tôi đã đăng nhập vào máy đó.
Đại

@Dai Bạn đang sử dụng XP hay Vista hay 2003? Câu hỏi này dành cho những os
Preet Sangha

17

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

3
sysiternals chỉ là kinh doanh. Tôi hy vọng họ đã trả cho Mark một tấn tiền để đến đó, hiện tại họ không ngăn cản anh ta làm công việc tốt mà anh ta đang làm trước đây và điều đó có thể sẽ tiếp tục.
gbjbaanb

@gbjbaanb, tôi rất vui vì điều đó. Hy vọng anh ấy tiếp tục cập nhật và thêm vào bộ.
nik

1
Điều này làm việc kỳ diệu đối với tôi, trong khi WMICcâ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.
Mike S

12

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 đề.


2
Lý do là nhiều người dùng có thể đăng nhập. Chuyển đổi người dùng nhanh, v.v. đã được giới thiệu cách đây nhiều năm. Tôi) giữ cho người dùng khác đăng nhập.
TomTom

Điểm hay @TomTom, tôi đã quên điều đó, tôi nghĩ rằng [win32_loggedonuser] cũng sẽ trả lại bất cứ ai mà psexec'd hoặc powershell'd cũng vậy.
MDMoore313

6

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
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.