确定用户登录Windows的时间
时间:2020-03-05 18:40:08 来源:igfitidea点击:
在我们的产品中,需要确定当前用户登录Windows(特别是Vista)的时间。似乎没有直接的API函数,而且我找不到与WMI相关的任何内容(尽管我不是WMI的专家,所以我可能会漏掉一些东西)。
有任何想法吗?
解决方案
回答
在WMI中执行:"从Win32_Session中选择*"
在那里,我们将拥有" StartTime"值。
希望能有所帮助。
回答
对于不熟悉WMI(例如我)的人,这里有一些链接:
- 有关使用多种语言使用WMI的MSDN页面:http://msdn.microsoft.com/zh-cn/library/aa393964(VS.85).aspx
- 有关Win32_Session的参考:http://msdn.microsoft.com/zh-cn/library/aa394422(VS.85).aspx,但Win32_session中的对象的类型为Win32_LogonSession(http://msdn.microsoft.com/zh_cn) -us / library / aa394189(VS.85).aspx),它具有更多有趣的属性。
- WMI资源管理器-一种可用于轻松运行查询(如发布的Michal)的工具。
这是从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筛选仅列出实际("交互")用户。我看不到如何选择"当前用户"的会话。
[编辑],这是Google对问题的处理结果:http://forum.sysinternals.com/forum_posts.asp?TID=3755
回答
使用WMI,Win32Session是一个很好的开始。同样应该指出的是,如果我们在网络上,则可以使用Win32_NetworkLoginProfile来获取各种信息。
Set logins = objWMIService.ExecQuery _ ("select * from Win32_NetworkLoginProfile") For Each objSession in logins Wscript.Echo objSession.LastLogon Next
我们可以收集的其他信息包括用户名,上次注销以及与配置文件相关的各种内容。