我们有一台 XP 机器,它在清晨运行计划任务,不幸的是,它必须登录到某个用户的桌面才能工作。不幸的是,该用户有时会被注销——要么是管理员登录(忘记重新登录正确的用户),要么是重新启动以应用安全更新等。
我想让 Nagios 监视当前登录的用户,以确认它是正确的。Nagios 在 Linux 上运行。
到目前为止,我已经为当前用户寻找了一个 SNMP 变量;我没有运气。我尝试使用 grep'd 获取用户名,并在登录前和登录后进行了操作,并检查了差异,但没有发现任何用处。snmpbulkwalk -m all -v2c -c community machine
我检查了net
命令(来自 Samba),但我没有看到任何东西——尽管我承认我可能错过了一些东西。各种session
选项似乎只显示net
会话(即使我使用我的域管理员帐户)。
%WINDIR%\System32\dllcache\query.exe session
将为您提供 WinXP 上所有当前登录用户的列表。出于某种原因,query.exe 不在我的 WinXP 测试机器上的路径环境变量中,所以我指定了整个路径。
如果您需要能够通过 RPC/DCOM 远程获取此信息的东西,请查看我写的一些内容:
http://myotherpcisacloud.com/post/2013/01/16/Usersexe-v1003.aspx
http://www.myotherpcisacloud.com/post/2013/01/13/Getting-RDP-Sessions-with-Client-Computer-Name.aspx
顺便说一句,您需要尽快退出 XP。它很老了。
编辑:好的,我会给你另一个选择,因为这些都没有帮助你。您想使用您的 Linux 机器通过网络查询这台 WinXP 机器。您想使用 WMI。您已找到适用于 Linux 的 WMI 客户端。到目前为止,一切都很好。
这将使您当前通过 WMI WQL 查询登录本地或远程计算机的用户。我在 Powershell 中写了这个。抱歉,我不会(阅读:不能)为您将其转换为 Perl 或 Bash,但只要您可以执行 WQL 查询,概念仍然相同:
LogonTypes 2 和 10 涵盖本地和远程交互会话,但不包括服务登录、网络登录或批处理登录。
是的,您确实需要访问 WinXP 机器的权限。这不仅仅是为了匿名网络进程而咳出所有这些数据。WinXP 上的本地组不是很细化,因为 WinXP 很老了,而且它的安全性远不如现代版本的 Windows……我的意思是把你的网络监控用户放在 WinXP 机器的本地 Admins 组中可能是你最好的选择。但是,如果您仍想遵循最小权限原则,我推荐您,在这种情况下,您可以使用 WMI 控制台 wmimgmt.msc,并将权限设置为您想要分配权限的任何帐户。
谢谢你@Ryan Ries,这是我正在使用的实际 Perl 脚本。希望它对其他人有用。它似乎工作正常,请随时报告任何错误。如果我发现任何东西,我会尽量记住更新它。
另外,除了将监控用户放在管理员中之外,我找不到任何方法可以在 XP 上进行这项工作。我认为这是在 XP 上执行此操作的唯一方法。
变更日志