在我们的产品中,需要确定当前用户登录Windows(特别是Vista)的时间。似乎没有直接的API函数,我找不到任何与WMI相关的东西(虽然我不是WMI的专家,所以我可能错过了一些东西)。
有什么想法吗?
答案 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)}}
说明:
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