4

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

有任何想法吗?

4

5 回答 5

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

[编辑] 这是谷歌对您的问题的结果:http: //forum.sysinternals.com/forum_posts.asp?TID=3755

于 2008-08-17T12:24:51.310 回答
2

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

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

解释:

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

参考:

于 2017-05-04T23:12:52.270 回答
2

您可以简单地使用 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
于 2020-10-15T08:30:16.640 回答
1

在 WMI 中执行:“select * from Win32_Session”,您将获得“StartTime”值。

希望有帮助。

于 2008-08-17T10:33:36.400 回答
0

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

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

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

于 2009-02-12T21:25:49.810 回答