确定用户登录Windows的时间

确定用户登录Windows的时间,windows,Windows,在我们的产品中,需要确定当前用户登录Windows(特别是Vista)的时间。似乎没有直接的API函数,我找不到任何与WMI相关的东西(虽然我不是WMI专家,所以我可能错过了一些东西) 有什么想法吗?在WMI中执行:“从Win32\u会话中选择* 在这里,您将具有“StartTime”值 希望能有所帮助。对于不熟悉WMI的人(如我),这里有一些链接: MSDN关于从各种语言使用WMI的页面: 关于Win32_会话的参考:,但Win32_会话中的对象的类型为Win32_LogonSession(

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

有什么想法吗?

在WMI中执行:“从Win32\u会话中选择* 在这里,您将具有“StartTime”值


希望能有所帮助。

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

  • MSDN关于从各种语言使用WMI的页面:
  • 关于Win32_会话的参考:,但Win32_会话中的对象的类型为Win32_LogonSession(),它具有更有趣的属性
  • -您可以使用该工具轻松运行查询,如Michal发布的查询
下面是从VBS查询Win32_会话的示例:

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解决您问题的一个结果:

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

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

您可以收集的其他信息包括用户名、上次注销以及各种与配置文件相关的内容。

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

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

  • 从WMI检索已登录用户的列表
  • 过滤掉所有非交互式用户(有效地删除
    NT AUTHORITY\SYSTEM
  • 重新设置用户和登录时间的格式以确保可读性
参考资料:

  • 要使用的WMI对象:
  • 格式化日期/时间:

您只需使用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
这似乎对Windows Server不起作用。