当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 WMI 事件跟踪 Active Directory 更改

作者:精品下载站 日期:2024-12-14 13:17:04 浏览:13 分类:玩电脑

如何使用 WMI 事件跟踪 Active Directory 更改


Active Directory 是许多组织的关键组件。包含数十万个不断变化的对象也会让人不知所措。幸运的是,您可以通过一些 PowerShell 专业知识和一点时间来跟踪 Active Directory 更改。

在本教程中,您将学习如何使用 WMI 事件来跟踪 Active Directory 更改并让您了解 Active Directory 对象的情况!

先决条件

本文将是一个实践教程。如果您想继续操作,请确保您具备以下条件:

  • Active Directory 域 - 本教程将使用 Windows Server 2019,并将 Active Directory 和林功能级别设置为 2019,但运行 Windows 2008 R2 或更高版本的域控制器 (DC) 应该可以工作。本教程将使用名为 test.local 的域以及两个 DC(DC01 和 DC02)。
  • 安装了 PowerShell 的已加入域的 Windows PC。本教程将使用 Windows 10 和 Windows PowerShell v5.1 或 PowerShell 7。
  • PowerShell 活动目录模块。
  • 作为域中域管理员组成员的用户帐户。

使用 WMI 查找 Active Directory 组

当 Active Directory 中的对象发生更改时,您必须先了解 WMI 事件将在其中显示并查询组成员的 WMI 类,然后才能收到通知。为此,在 DC 上:

1. 打开 PowerShell。

2. 运行Get-CimClass 连接到命名空间并查找命名空间中的所有可用类。在 CimClassName 列中,您将看到 ds_group。此类列出了 Active Directory 中的所有组及其属性。

Get-CimClass -Namespace 'ROOT\Directory\LDAP'

[玩转系统] 如何使用 WMI 事件跟踪 Active Directory 更改

3. 现在,运行 Get-CimInstance 查找 ds_group 类的所有实例,该类将返回每个组的 cn 属性。

Get-CimInstance -Namespace 'root\directory\ldap' -ClassName ds_group | Select-Object -Property DS_cn

[玩转系统] 如何使用 WMI 事件跟踪 Active Directory 更改

创建 WMI 事件订阅

现在您已经知道在 WMI 中哪里可以找到组,下一步是设置 WMI 事件订阅以“侦听”对这些 WMI 实例的更改。要监视特定事件(例如对 Active Directory 组的更改),您必须订阅 WMI 事件。

您可以订阅许多不同类型的 WMI 事件,包括创建、删除和修改事件。在这种情况下,您需要知道 CIM 实例(AD 组)何时被修改。在这种情况下,您将使用名为 CIM_InstModification 的类。CIM_InstModification 类监视任何 CIM 实例的修改。

开发 WQL 查询

要设置 WMI 事件订阅,您必须首先开发 WQL 查询。 WQL 是一种专用于 WMI 的简单语言,允许您以类似 SQL 的语法查找 WMI 实例。在此示例中,您要查找的查询如下例所示。

以下 WQL 查询将查找修改与 DS_group 名称匹配的实例的所有事件。您还会注意到 within 运算符。该运算符是轮询间隔,告诉 Windows 每 10 秒检查一次新事件。

Select * from CIM_InstModification within 10 where TargetInstance ISA 'DS_group'

您还可以通过添加更多条件(例如将 AND TargetInstance.ds_cn='Enterprise Admins' 添加到 WQL 语句末尾)来查询对特定 AD 组的更改。

在 PowerShell 中创建 WMI 订阅

现在您已经制作了 WQL 查询,下一步是进入 PowerShell 并使用它来订阅事件。要做到这一点:

1. 在域控制器上打开 PowerShell。

2. 创建一个名为 $query 的变量,将您刚刚提出的查询指定为值。

$query = "Select * from CIM_InstModification within 10 where TargetInstance ISA 'DS_group'"

3. 使用 Register-CimInductionEvent cmdlet 使用该查询创建订阅(注册事件)。以下命令使用查询注册名为 GroupMonitoring 的 WMI 订阅,以将结果限制为仅 ROOT\directory\LDAP 命名空间内的 DS_Group 修改事件。

Register-CimIndicationEvent -Query $query -SourceIdentifier 'GroupMonitoring' -MessageData 'Group Info Changed' -Namespace 'ROOT\directory\LDAP'

Register-CimInductionEvent 创建临时 WMI 事件订阅。当您关闭 PowerShell 控制台时,订阅将不再有效。使用永久事件订阅来长期监控 AD 组。

4. 现在,通过运行 Get-EventSubscriber 确认您已成功注册订阅,该操作应返回如下所示的对象。

[玩转系统] 如何使用 WMI 事件跟踪 Active Directory 更改

读取 WMI 事件

Windows 现在应该监视所有 Active Directory 组的所有修改事件。为了测试这一点,我们现在将一个成员添加到一个组中,看看会发生什么。

假设您仍在 DC 上的 PowerShell 中:

1. 运行 Add-ADGroupMember cmdlet 将用户添加到企业管理员组。以下示例添加名为User2的用户帐户。

大约 10 秒后,该事件应该会触发您设置先前的订阅。

Add-ADGroupMember -Identity 'Enterprise Admins' -Members User2

2. 要查找事件,请运行 Get-Event cmdlet 来搜索所有新注册的事件。如果一切顺利,您应该会看到类似于以下屏幕截图的输出。在屏幕截图中,SourceInstance 是对象属性的当前值。 PreviousInstance 值是对象属性的前一个值。

(Get-Event).SourceEventArgs.newevent

[玩转系统] 如何使用 WMI 事件跟踪 Active Directory 更改

3. 现在,缩小结果范围,仅显示当前警报值,如下所示。您现在将看到企业管理员组中当前组成员的列表。

(Get-Event).SourceEventArgs.newevent.SourceInstance | Select-Object -Property ds_member

[玩转系统] 如何使用 WMI 事件跟踪 Active Directory 更改

如果您想获取更改发生之前的值,请查看 PreviousInstance 对象的 DS_Member 属性,如下所示。

(Get-Event).SourceEventArgs.newevent.PreviousInstance | select DS_member

[玩转系统] 如何使用 WMI 事件跟踪 Active Directory 更改

结论

现在您已经知道如何设置 WMI 事件订阅来跟踪 Active Directory 更改,您可以使用此 PowerShell 代码并从中构建监视脚本。

看看您现在是否可以通过使用 New-WinEvent cmdlet 将这些事件记录到 Windows 事件日志或使用 Send-MailMessage 发送电子邮件来构建监视工具!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯