在窗口中查询用户会话
本文关键字:用户 会话 查询 窗口 | 更新日期: 2023-09-27 18:34:32
有一个内置工具:query.exe
允许您查看Windows中的所有活动用户和会话。
它的输出如下所示:
PS C:'> query.exe user
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
>testusr console 1 Active none 12/16/2014 9:29 AM
现在我有只解析query.exe
输出的代码,但我们中的一些人担心未来的操作系统升级可能会改变查询的输出,所以我们正在寻找一个可以改用的 API 调用。
无论如何,有没有.Net方法来收集相同的信息?
对于替代方案,我们不需要所有字段,但我们确实需要:用户名、状态和登录时间。我们还需要从系统上下文运行此代码,以便任何需要用户上下文的代码或 WMI 类都不适用于我们。
好吧,我发现的,我认为可能对你有用的是决明子项目。
主页中几乎为您准备好了示例:
ITerminalServicesManager manager = new TerminalServicesManager();
using (ITerminalServer server = manager.GetLocalServer())
{
server.Open();
foreach (ITerminalServicesSession session in server.GetSessions())
{
Console.WriteLine("Hi there, " + session.UserAccount + " on session " + session.SessionId);
Console.WriteLine("It looks like you logged on at " + session.LoginTime +
" and are now " + session.ConnectionState);
}
}
正如你所看到的,当你得到一个终端服务会话时,你会发现用户名,登录时间和连接状态。
希望这对您有所帮助。
您可以使用 WMI 简单地获取上次登录时间:
using System;
using System.Management;
using System.Windows.Forms;
namespace WMISample
{
public class MyWMIQuery
{
public static void Main()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root''CIMV2",
"SELECT * FROM Win32_LogonSession");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_LogonSession instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("Last Logon: {0}", queryObj["StartTime"]);
}
}
catch (ManagementException e)
{
MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
}
}
}
听起来你想要NetWkstaUserEnum
.我找不到本机 .NET 版本,但它似乎是一个相当轻的互操作调用。