有没有办法以编程方式收集过去 30 天内或两个日期之间登录过 Windows 服务器(特别是 2008 R2)的用户列表?有 2 个活动目录服务器,所有用户都是同一域的成员。
出于 SPLA 原因,我的最终目标是自动获取我们每台服务器的唯一用户列表。
答案1
这是手动的,而不是通过程序,但您可以在事件查看器中创建一个过滤器,该过滤器将仅显示您的登录事件。右键单击文件夹Custom Views
并选择该Create Custom View
选项。不幸的是,对于此过滤器,您必须编辑 XML。以下是过滤器的 XML 的样子:
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=4624)]]
and
*[EventData[Data[@Name='LogonType'] and (Data='2' or Data='10' or Data='11')]]
</Select>
<Suppress Path="Security">
*[EventData[Data[@Name='TargetDomainName'] and (Data = 'Window Manager')]]
</Suppress>
</Query>
</QueryList>
您可能希望编辑此内容以包括登录类型 7(解锁锁定的会话)。有关登录类型代码的更多信息,请参见此处:
http://www.windowsecurity.com/articles-tutorials/misc_network_security/Logon-Types.html
请注意,这不会按日期范围进行过滤:仅按登录进行过滤。但是,一旦缩小了该部分的范围,就可以轻松地在事件查看器中手动浏览日期范围。
不幸的是,当我使用“连接到另一台计算机”选项时,即使防火墙已关闭,此过滤器也不起作用。
答案2
没有简单的方法。首先想到的是梳理安全日志。您正在寻找事件 ID 4624。注意登录类型(如果您的目的是计算交互式登录,则为 2,10,11)。
根据安全日志条目的生成速度和日志的大小,日志可能会在 30 天周期之前被覆盖。
最好强制使用登录脚本,将计数集中到某个中心位置。