Pregunta

En nuestro producto surgió la necesidad de determinar cuánto tiempo el usuario actual ha iniciado sesión en Windows (específicamente, Vista).Parece que no existe una función API sencilla para esto y no pude encontrar nada relevante con WMI (aunque no soy un experto en WMI, por lo que es posible que me haya perdido algo).

¿Algunas ideas?

¿Fue útil?

Solución

Para las personas que no están familiarizadas con WMI (como yo), aquí hay algunos enlaces:

Y aquí hay un ejemplo de consulta de Win32_Session desde 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

Alerta 6 sesiones para mi computadora personal, tal vez pueda filtrar por LogonType para enumerar solo los usuarios reales ("interactivos").No pude ver cómo se puede seleccionar la sesión del "usuario actual".

[editar] y aquí hay un resultado de Google para su problema: http://forum.sysinternals.com/forum_posts.asp?TID=3755

Otros consejos

En Powershell y WMI, el siguiente comando de una línea devolverá una lista de objetos que muestran el usuario y la hora en que inició sesión.

Get-WmiObject win32_networkloginprofile | ? {$_.lastlogon -ne $null} | % {[PSCustomObject]@{User=$_.caption; LastLogon=[Management.ManagementDateTimeConverter]::ToDateTime($_.lastlogon)}}

Explicación:

  • Recuperar la lista de usuarios conectados desde WMI
  • Filtre los usuarios no interactivos (elimina efectivamente NT AUTHORITY\SYSTEM)
  • Reformatea el usuario y el tiempo de inicio de sesión para facilitar la lectura.

Referencias:

En WMI haz:"Seleccione * de Win32_Session" Allí tendrá el valor "Inicio de la hora".

Espero que ayude.

Al utilizar WMI, Win32Session es un gran comienzo.Además, cabe señalar que si estás en una red puedes usar Win32_NetworkLoginProfile para obtener todo tipo de información.

Set logins = objWMIService.ExecQuery _
   ("select * from Win32_NetworkLoginProfile")
For Each objSession in logins
   Wscript.Echo objSession.LastLogon
Next

Otros datos que puede recopilar incluyen el nombre de usuario, el último cierre de sesión y varios elementos relacionados con el perfil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top