其他人必须在 Windows 7 环境中远程确定当前登录的用户是谁?我正在使用 .NET 4.0 和 C#。环境是XP和7的混合。
- 涉及会话的 WMI 查询会导致所有活动会话,但不是交互式会话。
- 如果用户通过远程桌面连接,则来自 ComputerSystem (WMI) 的 UserName 返回 null 异常,这很常见,无法使用此方法。
PsLoggedOn
对我的目的来说太长了(是的,300 毫秒太长了)并且令人惊讶地不是 100% 的时间准确- 使用 p/invoke for
WTSGetActiveConsoleSessionID
orLsaEnumerateLogonSessions
太复杂并且容易出现内存泄漏(根据我的阅读) tasklist /S <computername>
将返回 XP 系统的信息,但由于那个可爱的 UAC,Windows 7 不会令人愉快。- 由于权限限制,无法远程访问 HKCU(win 注册表),可以访问 HKCU,但 Volatile Environment 似乎没有“活动”标签
到目前为止,最可靠的方法是使用从命令行PsExec
远程执行并远程遍历输出到文本。qwinsta
这很烦人并且需要时间(超过PsLoggedOn
),但我在这里没有足够的想法来确保可靠性。可靠性先于速度,但就成本效益而言,速度非常重要。
第三方工具不是一个选项,必须是脚本,最好是 WMI 和 C#。我深入研究了使用 Principal 对象击中 DC,但恐怕我可能会更加困惑自己。此外,所有用户帐户都是管理员。
我对谷歌做了很多研究,但我想也许我找错地方了。
有接盘侠吗?