在我们的产品中,需要确定当前用户登录 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)}}

解释:

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

参考:

在 WMI 中执行以下操作:“从win32_session中选择 *”,您将拥有“启动时间”值。

希望有帮助。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top