Сведения о вопросе

HOLY

09:51, 16th August, 2020

Теги

windows    

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

Просмотров: 422   Ответов: 4

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

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



  Сведения об ответе

P_S_S

08:46, 22nd August, 2020

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

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


  Сведения об ответе

davran

05:10, 14th August, 2020

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

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

Объяснение:

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

Рекомендации:


  Сведения об ответе

P_S_S

17:05, 8th August, 2020

В WMI делаем: "select * from Win32_Session" там вы будете иметь значение "StartTime".

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


  Сведения об ответе

ITSME

12:55, 26th August, 2020

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться