我现在有一台运行 Windows 2000 的服务器,很快就会升级到 2003。有没有办法检查用户状态和 PC 状态?
例如,
- 如果用户空闲
- 如果 PC 被锁定
- 用户登录时间
如果它在 Windows 2000 中不能运行也没关系,但如果能运行就太好了。
谢谢你的帮助 :)
答案1
无论是服务器还是客户端操作系统,都没有内置功能可以执行您要求的任何操作(并且您不会在服务器上看到任何从 W2K 迁移到 W2K3 的新功能)。您必须编写一些代码才能获得所需的功能。
对于服务器计算机,“登录”的含义与您想象的不同。客户端计算机上的“交互式”登录肯定有开始时间和结束时间。从客户端到远程服务器计算机的“登录”将取决于客户端正在执行的操作。从客户端到服务器的终端服务登录是“交互式”的,并共享客户端自己的“交互式”会话的属性。
我假设您可能想知道客户端计算机上“交互式”会话的持续时间。您可以查看查询Win32_LogonSession WMI 类作为获取该信息的一种方式。
我想您认为可以使用服务器计算机上的事件日志来查明客户端计算机何时进行“交互式”登录。但您不能。
从客户端计算机执行初始域身份验证或访问服务器计算机上的“映射”的“驱动器”是“网络”登录,与登录和注销相关的时间将与客户端开始访问资源的时间以及客户端(或服务器)因不活动而关闭连接的时间(或用户客户端会话的“取消映射”或“交互式”注销)有关。
您不应认为“域登录”或 Microsoft 文件和打印会话(如 SSH 或 TELNET 会话)具有固定的持续时间,即从用户“登录”开始,到用户“注销”结束。在客户端计算机的正常使用过程中,与服务器计算机的连接可能会时断时续。使用服务器端事件日志来确定客户端计算机上“交互式”会话的持续时间是没有用的。
这里有一些示例代码用于检测工作站是否被锁定:http://www.codeproject.com/KB/vb/DetectWindowslockunlock.aspx 同样,您可以将其从 C# 改编为任何可以调用必要 API 的语言。
听起来您想知道的其余内容主要在屏幕保护程序状态中。这里有一篇 Microsoft 文章,描述了如何使用 Win32 API 调用检查屏幕保护程序状态(示例中使用 VB,但您可以使用任何允许您调用该 API 的语言来执行此操作):http://support.microsoft.com/kb/315725
如果您将“空闲”定义为正在运行的屏幕保护程序,那么您可以用同样的方式获得“空闲”。如果您对“空闲”有不同的定义,那么您只能靠自己了——操作系统不会帮助您。
答案2
恐怕我不记得这在 2000 中是否有效,但文件服务器管理 MMC 应该可以让您看到文件服务器会话已打开多长时间以及会话已空闲多长时间。这不一定能反映完整的客户端状态。
我不相信你能从文件服务器查明 PC 是否被锁定。但是,我确信客户端上的脚本可以。
答案3
我不知道您的目标到底是什么(或者您正在解决什么问题),但如果您在客户端上运行着 VNC 等远程桌面软件,您可以登录该软件查看控制台上正在发生的事情。只需记住免费版本没有可用的加密;听起来您想在升级客户端计算机时检查它们在做什么。
一种可能的方法是,在客户端将使用的服务器上,右键单击我的电脑并转到管理链接并检查打开的会话和打开的文件列表,然后如果这些客户端上有 VNC,则连接到 IP 并查看发生了什么。
或者您可以从命令提示符中使用“net send”来广播您需要每个人都注销系统。