我正在尝试为活动目录设置一个监控 vbscript。我需要将所有修改过的用户导出到一个文件中。此脚本将每 10 分钟运行一次并导出所有修改过的用户(修改的帐户、修改的日期、修改者)。组修改也是一样(不同的输出文件)。
我不介意使用 vbscript、csvde 或 dget、dsquery 或批处理来获取这些信息。任何可以设置计划任务的东西都可以。
答案1
您可以使用 powershell 和 LDIF 完成大部分操作 - 例如,下面的代码片段将生成一个名为 ad.txt 的文件,其中包含过去十分钟内更改或添加的用户对象列表
$DateString = (Get-Date).AddMinutes(-10).ToString("u") -Replace "-|:|\s"
$DateString = $DateString -Replace "Z", ".0Z"
$LdapFilter = """" + "(&(|(whenChanged>=" + $DateString + ")(whenCreated>=" + $DateString + "))(objectClass=user))" + """"
$lCmd = "ldifde -f ad.txt -r " + $LdapFilter + " -l ""dn,whenCreated,whenChanged"""
Invoke-Expression $lCmd
答案2
好的,我在 TechNet 上找到了这个:
此脚本在计划任务中运行,用于监控 Active Directory 中的更改并发出警报。组成员身份的任何更改都会导致创建包含更改的警报电子邮件。
该脚本将组的当前成员保存在 XML 文档中,然后每隔 X 分钟比较一次实时目录。该脚本不会检测计划任务运行期间的更改,即如果在任务运行期间添加和删除成员,则不会检测到任何更改。
我每 15 分钟运行一次该脚本,发现它非常有效。
它检测用户、计算机或组帐户的变化。
谢谢 Ben Wilkinson!
答案3
这听起来像是一个简单的要求,但它很快就变成了沸腾的海洋。
虽然有商业产品可以做到这一点(原因显而易见),但基本上你需要运行查询(修改日期为 < 10 分钟前的所有用户)。不幸的是,这不会告诉你发生了什么变化。我也不认为它会告诉你是谁做的更改(你可以将它与事件查看器 AD 日志放在一起。)(我不确定,但这也可能会发现密码更改。)
为了完成这幅图,您还需要做的是,您基本上需要导出每个用户及其所有属性,并保留带有时间戳的记录。
在这一点上,我想指出您正在创建多个包含 Active Directory 内容(子集)的独立数据库。
更改用户列表后,您必须对对象的当前和以前的状态进行比较,并将该数据显示给关心的人。
然后,在某个时候,你将不得不清理一些东西,因为保留 AD 对象的多个副本将开始占用空间...一旦更改报告出来,你实际上只需要保留当前和紧接着的先前记录。
根据您环境中的用户数量、可以进行更改的人数(管理员、帮助台等)以及这些更改的频率,这很容易变得难以管理。
老实说,除非您想快速发现错误行为,否则 10 分钟可能有点太多了;我不会花超过一个小时的时间,而且可能每天都会记录。
但是,这里有一些地方可以帮助您入门:
答案4
我可能迟到了,但我已经编写了一个脚本来监视用户/组的变化使用 power shell 监视组和用户的变化我发现大多数脚本的常用方法是通过比较更改前后来监控 AD 级别上发生的更改。我的方法是通过查看存储在 AD 控制器上的事件来实现这一点。这样做的最大好处是可以准确地告诉您谁在何时进行了更改。
此 PowerShell 脚本可以根据您定义的参数生成报告并监视 Active Directory 中用户和组发生的变化。它可以告诉您:
- 何时以及谁更改了 Active Directory 域中任何组的组成员身份
- 何时以及谁更改了用户数据,包括密码、UserPrincipalName、SamAccountName 等……
- 何时、何人更改了密码 何时、何人锁定了账户以及发生在哪里
很抱歉我没有在这里粘贴代码,但有太多未完成的部分,而且工作仍在进行中。希望链接足够,并能对某些人有所帮助。
您每日、每月或每季度收到的报告示例。