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


37

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

Grazie

Risposte:


47

Questa era la 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.


Quando eseguo questo comando da remoto o localmente ottengo solo una singola riga di output " UserName" con nient'altro elencato, anche se ho effettuato l'accesso a quella macchina.
Dai,

@Dai Stai usando XP o Vista o 2003? Questa domanda era per quelli os
Preet Sangha,

17

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


La Microsoft Sysinternals Suite dispone di uno strumento chiamato PsLoggedOn ,

psloggedon.exe -l

C'è anche NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme

3
sysinternals è solo il business. Spero che abbiano pagato a Mark un sacco di soldi per andare lì, al momento non l'hanno fermato a fare il buon lavoro che stava facendo prima e che potrebbe continuare a lungo.
gbjbaanb,

@gbjbaanb, ne sono felice. Spero che continui ad aggiornare e aggiungere alla suite.
nik,

1
Ciò ha funzionato a meraviglia per me, mentre WMICnella risposta accettata si lamentava che RPC non era in esecuzione. È una nuova lattina di worm che non mi va di aprire in questo momento, quindi ho controllato su psloggedon e sono abbastanza felice.
Mike S,

12

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 è stato lo stesso utente, quindi non è stato un problema.


2
Il motivo è che è possibile accedere a più di un utente. Il passaggio rapido da un utente all'altro è stato introdotto anni fa. I) t mantiene l'altro utente connesso.
TomTom,

Good Point @TomTom, me ne sono dimenticato, penso che [win32_loggedonuser] avrebbe restituito anche chiunque fosse psexec'd o powershell'd.
MDMoore313,

6

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.