Определение того, как долго пользователь входит в систему Windows

StackOverflow https://stackoverflow.com/questions/13578

  •  08-06-2019
  •  | 
  •  

Вопрос

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

Есть какие-нибудь идеи?

Это было полезно?

Решение

Для людей, не знакомых с 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 сеансах для моего персонального компьютера, возможно, вы можете отфильтровать по типу входа, чтобы перечислить только реальных ("интерактивных") пользователей.Я не смог понять, как вы можете выбрать сеанс "текущего пользователя".

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

Другие советы

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

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

Объяснение:

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

Ссылки:

В WMI делаем:"выберите * из Win32_Session" там у вас будет значение "startTime".

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top