Определение того, как долго пользователь вошел в Windows - PullRequest
4 голосов
/ 17 августа 2008

В нашем продукте возникла необходимость определить, как долго текущий пользователь вошел в Windows (в частности, в Vista). Кажется, для этого нет прямой API-функции, и я не смог найти ничего подходящего для WMI (хотя я не эксперт по WMI, поэтому я мог что-то пропустить).

Есть идеи?

Ответы [ 4 ]

4 голосов
/ 17 августа 2008

Для людей, не знакомых с WMI (таких как я), вот несколько ссылок:

А вот пример запроса Win32_Session из 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

Он предупреждает о 6 сеансах для моего персонального компьютера, возможно, вы можете отфильтровать по LogonType только список реальных («интерактивных») пользователей. Я не мог понять, как можно выбрать сеанс «текущего пользователя».

[править] и вот результат от Google к вашей проблеме: http://forum.sysinternals.com/forum_posts.asp?TID=3755

2 голосов
/ 05 мая 2017

В Powershell и WMI следующая однострочная команда вернет список объектов, показывающих пользователя и время его входа в систему.

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

Пояснение:

  • Получить список вошедших в систему пользователей из WMI
  • Отфильтровать всех неинтерактивных пользователей (эффективно удаляет NT AUTHORITY\SYSTEM)
  • Переформатирует пользователя и время входа в систему для удобства чтения

Ссылки:

1 голос
/ 17 августа 2008

В WMI: «выберите * из Win32_Session» там у вас будет значение «StartTime».

Надеюсь, это поможет.

0 голосов
/ 13 февраля 2009

Используя WMI, Win32Session - отличное начало. Также следует отметить, что если вы находитесь в сети, вы можете использовать Win32_NetworkLoginProfile для получения всех видов информации.

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

Другие сведения, которые вы можете собрать, включают имя пользователя, последний выход из системы, а также различные материалы, связанные с профилем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...