确定用户登录Windows的时间
在我们的产品中,需要确定当前用户登录Windows(特别是Vista)的时间。似乎没有直接的API函数,我找不到任何与WMI相关的东西(虽然我不是WMI专家,所以我可能错过了一些东西) 有什么想法吗?在WMI中执行:“从Win32\u会话中选择* 在这里,您将具有“StartTime”值确定用户登录Windows的时间,windows,Windows,在我们的产品中,需要确定当前用户登录Windows(特别是Vista)的时间。似乎没有直接的API函数,我找不到任何与WMI相关的东西(虽然我不是WMI专家,所以我可能错过了一些东西) 有什么想法吗?在WMI中执行:“从Win32\u会话中选择* 在这里,您将具有“StartTime”值 希望能有所帮助。对于不熟悉WMI的人(如我),这里有一些链接: MSDN关于从各种语言使用WMI的页面: 关于Win32_会话的参考:,但Win32_会话中的对象的类型为Win32_LogonSession(
希望能有所帮助。对于不熟悉WMI的人(如我),这里有一些链接:
- MSDN关于从各种语言使用WMI的页面:
- 关于Win32_会话的参考:,但Win32_会话中的对象的类型为Win32_LogonSession(),它具有更有趣的属性
- -您可以使用该工具轻松运行查询,如Michal发布的查询
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对象:
- 格式化日期/时间:
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不起作用。