Determinare per quanto tempo l'utente è connesso a Windows
-
08-06-2019 - |
Domanda
È sorta la necessità, nel nostro prodotto, per determinare per quanto tempo l'utente corrente è stato effettuato l'accesso a Windows (in particolare, Vista).Sembra che non c'è dritto in avanti funzione API per questo non riuscivo a trovare nulla di rilevante con WMI (anche se io non sono esperto con WMI, quindi potrei essermi perso qualcosa).
Tutte le idee?
Soluzione
Per persone che non hanno familiarità con WMI (come me), ecco alcuni link:
- Pagina di MSDN, utilizzando WMI da varie lingue: http://msdn.microsoft.com/en-us/library/aa393964(VS.85).aspx
- riferimento Win32_Session: http://msdn.microsoft.com/en-us/library/aa394422(VS.85).aspx, ma gli oggetti in Win32_session sono di tipo Win32_LogonSession (http://msdn.microsoft.com/en-us/library/aa394189(VS.85).aspx), che ha più interessante proprietà.
- WMI Explorer - uno strumento che è possibile utilizzare per eseguire facilmente le query come quella di Michal registrato.
E qui l'esempio di query Win32_Session da VBS:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set sessions = objWMIService.ExecQuery _
("select * from Win32_Session")
For Each objSession in sessions
Wscript.Echo objSession.StartTime
Next
Allerta 6 sessioni per il mio personal computer, forse si può filtrare per tipo di accesso per elencare solo il real ("interattivo") degli utenti.Io non riuscivo a vedere come è possibile selezionare la sessione di "utente corrente".
[modifica] ed ecco un risultato da Google per il tuo problema: http://forum.sysinternals.com/forum_posts.asp?TID=3755
Altri suggerimenti
In Powershell e WMI, la seguente riga di comando restituirà un elenco di oggetti mostra l'utente e il tempo sono connessi.
Get-WmiObject win32_networkloginprofile | ? {$_.lastlogon -ne $null} | % {[PSCustomObject]@{User=$_.caption; LastLogon=[Management.ManagementDateTimeConverter]::ToDateTime($_.lastlogon)}}
Spiegazione:
- Recuperare l'elenco degli utenti collegati da WMI
- Filtrare qualsiasi non-utenti interattivi (rimuove efficacemente
NT AUTHORITY\SYSTEM
) - Riformatta l'utente di accesso e di tempo per migliorare la leggibilità
Riferimenti:
- L'oggetto WMI per l'uso: https://forum.sysinternals.com/topic3755.html
- La formattazione della data/ora: https://blogs.msdn.microsoft.com/powershell/2009/08/12/get-systemuptime-and-working-with-the-wmi-date-format/
In WMI fare:"select * from Win32_Session" non avrete "Ora di inizio" del valore.
Speranza che aiuta.
Utilizzando WMI, il Win32Session è un ottimo inizio.E, va sottolineato che, se siete su una rete, è possibile utilizzare Win32_NetworkLoginProfile per ottenere tutti i tipi di informazioni.
Set logins = objWMIService.ExecQuery _
("select * from Win32_NetworkLoginProfile")
For Each objSession in logins
Wscript.Echo objSession.LastLogon
Next
Altri pezzi di informazioni che si possono raccogliere includere il nome utente, l'ultima disconnessione, così come i vari profilo connesse.