确定用户登录Windows的时间

时间:2008-08-17 10:22:26

标签: windows

在我们的产品中,需要确定当前用户登录Windows(特别是Vista)的时间。似乎没有直接的API函数,我找不到任何与WMI相关的东西(虽然我不是WMI的专家,所以我可能错过了一些东西)。

有什么想法吗?

5 个答案:

答案 0 :(得分:4)

对于不熟悉WMI的人(像我一样),这里有一些链接:

这是从VBS查询Win32_Session的示例:

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过滤仅列出真实(“交互”)用户。我看不出你如何选择“当前用户”的会话。

[edit]这是Google针对您的问题的结果:http://forum.sysinternals.com/forum_posts.asp?TID=3755

答案 1 :(得分:2)

在Powershell和WMI中,以下单行命令将返回显示用户及其登录时间的对象列表。

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

说明:

  • 从WMI检索登录用户列表
  • 过滤掉所有非互动用户(有效删除NT AUTHORITY\SYSTEM
  • 重新格式化用户和登录时间以提高可读性

参考文献:

答案 2 :(得分:1)

在WMI中执行:“select * from Win32_Session” 在那里你将拥有“StartTime”值。

希望有所帮助。

答案 3 :(得分:0)

使用WMI,Win32Session是一个很好的开始。同样,应该指出的是,如果你在网络上,你可以使用Win32_NetworkLoginProfile来获取各种信息。

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

您可以收集的其他信息包括用户名,上次注销以及各种与个人资料相关的内容。

答案 4 :(得分:0)

您可以简单地使用CMD或PowerShell通过以下命令查询用户:

C:\> query user
USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
john                  rdp-tcp#56          9  Active          .  5/3/2020   10:19 AM
max                   rdp-tcp#5          30  Active    5+23:42  9/4/2020   7:31  PM
yee                                      35  Disc         6:41  10/14/2020 6:37  PM
mohammd               rdp-tcp#3          37  Active          .  10/15/2020 7:51  AM