Pergunta

Surgiu a necessidade, em nosso produto, de determinar há quanto tempo o usuário atual está conectado ao Windows (especificamente, Vista).Parece que não existe uma função de API direta para isso e não consegui encontrar nada relevante com o WMI (embora não seja especialista em WMI, então posso ter perdido alguma coisa).

Alguma ideia?

Foi útil?

Solução

Para pessoas que não estão familiarizadas com o WMI (como eu), aqui estão alguns links:

E aqui está um exemplo de consulta Win32_Session do 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

Ele alerta 6 sessões para meu computador pessoal, talvez você possa filtrar por LogonType para listar apenas os usuários reais ("interativos").Não consegui ver como você pode selecionar a sessão do "usuário atual".

[editar] e aqui está um resultado do Google para o seu problema: http://forum.sysinternals.com/forum_posts.asp?TID=3755

Outras dicas

No Powershell e no WMI, o comando de uma linha a seguir retornará uma lista de objetos mostrando o usuário e a hora em que ele fez logon.

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

Explicação:

  • Recuperar a lista de usuários logados do WMI
  • Filtre todos os usuários não interativos (remove efetivamente NT AUTHORITY\SYSTEM)
  • Reformata o usuário e o tempo de logon para facilitar a leitura

Referências:

No WMI faça:"Selecione * no valor Win32_Session", você terá o valor "StartTime".

Espero que ajude.

Usando o WMI, o Win32Session é um ótimo começo.Além disso, deve-se ressaltar que se você estiver em uma rede, poderá usar Win32_NetworkLoginProfile para obter todo tipo de informação.

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

Outras informações que você pode coletar incluem o nome de usuário, último logoff, bem como vários itens relacionados ao perfil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top