sviluppo-web-qa.it

Come verificare chi è attualmente connesso alla workstation Windows dalla riga di comando?

L'ambiente è nel dominio, il server è Windows Server 2003, le workstation hanno Vista e XP installato.
Ho bisogno del modo di controllare in remoto chi è attualmente connesso alla workstation, preferibilmente da qualche semplice riga di comando e senza sistemi sysinternals o di terze parti.

Grazie

37
Andrija

Questo era il fonte originale ma ora è 404:

Hanno suggerito di utilizzare il WMIC (Windows Management Interface Command) disponibile su Windows:

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

Restituirà il nome utente attualmente registrato in xxx.xxx.xxx.xxx o

WMIC /NODE: "workstation_name" COMPUTERSYSTEM GET USERNAME 

restituirà il nome utente attualmente registrato in "nome_stazione di lavoro"

AGGIORNAMENTO: Questo dovrebbe funzionare anche su Windows 10 - se sei un amministratore sul computer remoto.

47
Preet Sangha

Siamo spiacenti, non ho notato che non si desidera utilizzare Sysinternals.
Questo è ora uno strumento technet di Microsoft, qualche motivo specifico per non usarlo?
Ho preferito Sysinternals rispetto ad altri strumenti di terze parti prima Mark Russinovich trasferito in Microsoft.


Microsoft Sysinternals Suite ha uno strumento chiamato Psloggedon ,

psloggedon.exe -l

C'è anche NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme
17
nik

Ho usato win32_loggedonuser, ma ho riscontrato un problema in cui è stato restituito più di un utente di dominio, quindi non ha funzionato per i miei scopi. Invece ho usato (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
}

il se è perché a volte getowner segnalerà più di un utente per qualche motivo, non so perché ma nel mio caso era lo stesso utente quindi non era un problema.

12
MDMoore313

Puoi ottenere queste informazioni da win32_loggedonuser.

Da questa pagina :

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_