在我们的产品中,需要确定当前用户登录 Windows(特别是 Vista)的时间。似乎没有直接的 API 函数,我找不到任何与 WMI 相关的东西(虽然我不是 WMI 专家,所以我可能错过了一些东西)。
有任何想法吗?
在我们的产品中,需要确定当前用户登录 Windows(特别是 Vista)的时间。似乎没有直接的 API 函数,我找不到任何与 WMI 相关的东西(虽然我不是 WMI 专家,所以我可能错过了一些东西)。
有任何想法吗?
对于不熟悉 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 过滤以仅列出真实(“交互式”)用户。我看不到如何选择“当前用户”的会话。
[编辑] 这是谷歌对您的问题的结果:http: //forum.sysinternals.com/forum_posts.asp?TID=3755
在 Powershell 和 WMI 中,以下单行命令将返回显示用户及其登录时间的对象列表。
Get-WmiObject win32_networkloginprofile | ? {$_.lastlogon -ne $null} | % {[PSCustomObject]@{User=$_.caption; LastLogon=[Management.ManagementDateTimeConverter]::ToDateTime($_.lastlogon)}}
解释:
NT AUTHORITY\SYSTEM
)参考:
您可以简单地使用 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
在 WMI 中执行:“select * from Win32_Session”,您将获得“StartTime”值。
希望有帮助。
使用 WMI,Win32Session 是一个很好的开始。同样,应该指出的是,如果您在网络上,您可以使用 Win32_NetworkLoginProfile 来获取各种信息。
Set logins = objWMIService.ExecQuery _
("select * from Win32_NetworkLoginProfile")
For Each objSession in logins
Wscript.Echo objSession.LastLogon
Next
您可以收集的其他信息包括用户名、上次注销以及各种与个人资料相关的内容。