Bagaimana cara memeriksa siapa yang saat ini masuk ke windows workstation dari command line?

37

Lingkungan ada dalam domain, server adalah Windows Server 2003, workstation telah menginstal Vista dan XP.
Saya perlu cara untuk memeriksa jarak jauh siapa yang saat ini masuk pada workstation, lebih disukai dari beberapa baris perintah sederhana dan tanpa sysinternals atau program pihak ketiga.

Terima kasih

Andrija
sumber

Jawaban:

47

Ini adalah sumber asli tetapi sekarang 404:

Mereka menyarankan menggunakan WMIC (Windows Management Interface Command) yang tersedia di windows:

WMIC /NODE: xxx.xxx.xxx.xxx COMPUTERSYSTEM GET USERNAME 

Akan mengembalikan nama pengguna yang saat ini masuk ke xxx.xxx.xxx.xxx, atau

WMIC /NODE: "workstation_name" COMPUTERSYSTEM GET USERNAME 

akan mengembalikan nama pengguna yang saat ini masuk ke "workstation_name"

PEMBARUAN: Ini juga bisa digunakan pada Windows 10 - jika Anda seorang admin di mesin jarak jauh.

Praha Sangha
sumber
Ketika saya menjalankan perintah ini baik dari jarak jauh atau lokal saya hanya mendapatkan satu baris output " UserName" dengan tidak ada yang terdaftar, meskipun saya masuk ke mesin itu.
Dai
@ Apakah Anda menggunakan XP atau Vista atau 2003? Pertanyaan ini untuk mereka
Preet Sangha
17

Maaf, tidak melihat Anda tidak ingin menggunakan Sysinternals.
Itu sekarang alat teknologi Microsoft, ada alasan khusus untuk tidak menggunakannya?
Saya lebih suka Sysinternals daripada alat pihak ketiga lainnya sebelum Mark Russinovich pindah ke Microsoft.


The Microsoft Sysinternals Suite memiliki alat yang disebut PsLoggedOn ,

psloggedon.exe -l

Ada juga NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme
nik
sumber
3
sysinternals hanyalah bisnis. Saya berharap mereka membayar Mark banyak uang untuk pergi ke sana, saat ini mereka tidak menghentikannya melakukan pekerjaan baik yang dia lakukan sebelumnya dan lama mungkin itu berlanjut.
gbjbaanb
@ gbjbaanb, saya senang tentang itu. Semoga dia terus memperbarui dan menambahkan ke suite.
nik
1
Ini berhasil bagi saya, sedangkan WMICjawaban yang diterima mengeluh bahwa RPC tidak berjalan. Itu kaleng baru cacing yang rasanya tidak ingin saya buka sekarang, jadi saya memeriksa psloggedon dan saya cukup senang.
Mike S
12

Saya telah menggunakan win32_loggedonuser, tetapi mengalami masalah ketika lebih dari satu pengguna domain dikembalikan, jadi itu tidak berfungsi untuk tujuan saya. Sebagai gantinya saya menggunakan (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
}

Jika ini karena kadang-kadang pemilik akan melaporkan lebih dari satu pengguna untuk beberapa alasan, tidak tahu mengapa tetapi dalam kasus saya itu adalah pengguna yang sama sehingga tidak menjadi masalah.

MDMoore313
sumber
2
Alasannya adalah bahwa lebih dari satu pengguna dapat login. Peralihan pengguna cepat dll. Diperkenalkan tahun lalu. I) t membuat pengguna lain tetap masuk.
TomTom
Good Point @TomTom, saya lupa tentang hal itu, saya pikir [win32_loggedonuser] juga akan mengembalikan siapa saja yang sudah di-psexec atau PowerShell.
MDMoore313
6

Anda bisa mendapatkan info ini dari win32_loggedonuser.

Dari halaman ini :

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