![我需要找到最后一位从 AD 登录到计算机的用户](https://linux22.com/image/582566/%E6%88%91%E9%9C%80%E8%A6%81%E6%89%BE%E5%88%B0%E6%9C%80%E5%90%8E%E4%B8%80%E4%BD%8D%E4%BB%8E%20AD%20%E7%99%BB%E5%BD%95%E5%88%B0%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E7%94%A8%E6%88%B7.png)
好的,我公司有 500 多台台式机,可以通过 lastlogontimestamp 确认哪些是活动的,哪些不是 - 到目前为止一切顺利。我现在需要知道谁是最后登录到活动桌面的用户,最好从 Active Directory 中获取此信息。
这些台式机分散在校园各处,可能每个月只登录一次等。因此,如果可能的话,我宁愿从 AD 获取信息,而不是编写在登录时运行的脚本来识别用户等。这样,我就不必再等一个月,等未知的 PC 开启,然后等用户登录并运行我的脚本。如果 PC 保持开启状态,我可以直接询问它们等。但除了偶尔使用外,它们大多数时间都处于关闭状态。识别用户可以帮助我识别 PC 的位置等。
我怀疑这些信息不保存在 AD 中,因为我搜索了又搜索,但找不到,但问问也无妨。这是一个 Windows 2008 网络,带有 XP 和 Win7 系统 - 谢谢
答案1
您可以在域控制器上启用“审核帐户登录事件”来执行此操作。然后,您可以查看域控制器上的“帐户登录”事件并搜索特定条目以匹配您要查找的用户/计算机。如果您需要将来自不同域控制器的条目汇集在一起,则可以从管理工作站订阅事件。
我相信像 Splunk 这样的工具也可以用于事件监控。
答案2
我在大学工作期间编写了一个系统来执行此操作。它使用 Windows 7/2008 工具wevtutil
在特定时间后提取每个域控制器的安全日志的 XML 格式转储,然后解析该 XML 文件以查找我感兴趣的事件。
wevtutil qe Security /r:$DC /q:"*[System[((EventID=$LogonID or EventID=$FLogonID or EventID=$LogoffID or EventID=$LockoutID) and TimeCreated[@SystemTime > '$LUFilterString'] and TimeCreated[@SystemTime < '$NowFilterString'] )]] "
它使用 XPath 格式的查询字符串,因此我只拉下我感兴趣的事件(登录、注销、登录失败、锁定)。
然后它将处理过的事件上传到我创建的数据库中。它更新了工作站的“上次登录”信息以及用户的“上次登录到”字段。这显然是一个批处理过程,但只要我掌握了比我更多的 .Net 技能,实时方法就完全有可能实现。
它很有用。我们设法跟踪了校园内 22,000 名热心人员的登录/退出/锁定事件(其中 6,000 人随时在校园内登录)。在繁忙时段,我每小时上传近 250,000 条记录。
是的,那么多。
登录的工作站会在域控制器上生成连续的登录事件流,我们跟踪了所有这些事件。这是一个相当繁忙的数据库,我最终使用批量插入来更新表,每 15 分钟运行一次。
由于它将数据放入方便的 MS SQL 表中,我们能够为我们的帮助台员工提供一些相当有用的数据。例如哪个站点(或 IP 地址)导致用户被锁定、用户过去一天登录的工作站数量以及哪些用户登录了特定工作站。