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

[玩转系统] 使用 PowerShell 扩展 Active Directory 日志搜索

作者:精品下载站 日期:2024-12-14 08:01:59 浏览:15 分类:玩电脑

使用 PowerShell 扩展 Active Directory 日志搜索


[玩转系统] 使用 PowerShell 扩展 Active Directory 日志搜索

最近,我发布了如何使用 PowerShell 查找 Active Directory 更改的演示。此过程要求您搜索所有域控制器上的安全事件日志。正如包括我自己在内的一些人指出的那样,这有可能在大型环境中无法很好地扩展。我仍然相信,如果您拥有大型 Active Directory 基础设施,那么您应该寻找专业的企业级管理工具。 PowerShell 非常适合填补空白或临时工作。

但是,有一种方法可以扩展我的搜索功能,那就是使用 PowerShell 7.x 并利用 ForEach-Object 的并行处理。我认为这是该功能的一个很好的用例。启动运行空间会产生开销,因此您需要确保该任务值得花费。在这种情况下,我认为确实如此。虽然您可能不会查询大量域控制器,但日志文件可能很大。我承认有限的测试证明了这一点。

传统方法

我将按原样使用 Get-ADuserAudit 函数。我不会对其进行任何更改。以下是我查询多个域控制器的方法。首先,我将定义一个列表。

$dcs = "dom1","dom2","dom1","offline","dom2","dom1"

我的测试域只有两个域控制器,因此我将查询它们几次。我还输入了一个我知道会失败的名字。我需要点源脚本。

. C:\scripts\get-adlog.ps1

现在运行它。我将参数值的哈希表分配给函数。

$get = @{
    DomainController = $dcs
    Since = "2/1/2021"
    Events = "Created","Deleted","Disabled"
}
$r = Get-ADUserAudit @get

该命令在大约 24 秒内找到了 15 个结果。

PowerShell 7 方式

现在对于 PowerShell 7。我将使用相同的域控制器列表和如下代码:

$r = $dcs | foreach-object -Parallel {
  . C:\scripts\get-adlog.ps1
  $get = @{
    DomainController = $_
    Since = "2/1/2021"
    Events = "Created","Deleted","Disabled"
}
Get-ADUserAudit @get
}

脚本块在每个管道输入对象的单独运行空间中运行,在本例中是域控制器的名称。在每个运行空间中,我都对函数进行点采购,因为它不是模块的一部分,并定义了我的参数哈希表,该参数哈希表又被分配给 Get-ADUserAudit。

此表达式返回相同的结果,但现在只用了大约 12 秒。一方面,12 秒对 24 秒没什么大不了的。但我希望这种规模具有更多的域控制器和更大的日志。那么 50% 可能真的有意义。对于大量服务器,您还可以利用限制。我使用默认值 5。您必须进行测试,看看调整油门限制是否有任何好处。

如果您尝试 Get-ADUserAudit 功能,尤其是使用此技术,我很想听听您的体验。

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

取消回复欢迎 发表评论:

关灯