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

[玩转系统] 如何在 Active Directory 中查找(并删除)未链接的 GPOS

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

如何在 Active Directory 中查找(并删除)未链接的 GPOS


随着组织的发展,其 Active Directory (AD) 环境和组策略 (GP) 基础设施也会随之发展。组策略对象 (GPO) 很快就会失控,在您意识到之前,您的环境中就会出现数十个未链接的 GPO。让我们改变这一点。

在本教程中,您将学习如何使用组策略管理控制台 (GPMC) 和 PowerShell 发现所有这些未链接的 GPO。

让我们开始吧!

先决条件

本文将是一个带有实践示例的教程。如果您想跟随,请确保您拥有:

  • 活动目录域。本文将使用名为 HomeLab.Local 的域。
  • 加入 AD 域的 Windows 计算机。本教程将使用 Windows 10。
  • Windows 计算机安装了远程服务器管理工具 (RSAT) 软件包。

未链接的 GPO 从哪里来?

当您创建 GPO 并定义所有设置时,您打算将其应用于客户端计算机,但该 GPO 实际上并未执行任何操作。要真正影响客户端计算机,GPO 必须链接到 AD 组织单位 (OU)。

随着时间的推移,越来越多的管理员创建 GPO,忘记链接它们,取消 GPO 与 OU 的链接,打算删除它们但从未这样做,GPO 闲置无所事事可能会激增。特别是在大型组织中,如果维护不当,未链接的 GPO 可能会增加到数百个。

在 GPMC 中查找未链接的 GPO

您可以通过以下两种方式之一找到未链接的 GPO:通过 GPMC 或通过 PowerShell。如果您只有少量未链接的 GPO,则使用 GPMC 而不是创建 PowerShell 脚本可能更有意义。

要通过 GPMC 查找未链接的 GPO:

1. 转至开始菜单并键入“组策略管理”,打开 GPMC。当 GPMC 程序出现时,将其打开。

2. 在 GPMC 中,转到林: —> 右键单击输入域名并点击搜索。此操作将打开搜索组策略对象对话框。

[玩转系统] 如何在 Active Directory 中查找(并删除)未链接的 GPOS

3. 单击搜索项下拉列表并选择GPO链接。此搜索项将搜索链接到 OU 的 GPO。将条件下拉列表更改为存在于,并将域更改为您的域。

在下面的屏幕截图中,这些设置的组合将搜索链接到 homelab.local 域中至少一个 OU 的所有 GPO。

完成后,点击添加添加条件。它将显示在所有搜索条件部分下。

[玩转系统] 如何在 Active Directory 中查找(并删除)未链接的 GPOS

4. 现在,单击搜索按钮查找与搜索条件匹配的所有 GPO。

[玩转系统] 如何在 Active Directory 中查找(并删除)未链接的 GPOS

5. 如下图所示,搜索结果中仅显示链接的 GPO。

[玩转系统] 如何在 Active Directory 中查找(并删除)未链接的 GPOS

6. 要查找未链接的 GPO,现在手动将所有 GPO 与链接的 GPO 进行比较,如下所示。在下面的屏幕截图中,仅链接了三个 GPO。通过查看组策略对象节点,您可以看到两个 GPO 未显示(UnlinkedGPO1 和 UnlinkedGPO2)。这意味着它们没有联系。

此任务将非常耗时,您将在下一节中了解如何通过 PowerShell 执行此任务。

[玩转系统] 如何在 Active Directory 中查找(并删除)未链接的 GPOS

当链接的 GPO 被分配给像 OU 这样的 AD 对象时,它们将具有链接,如下所示。如果您只有少数 GPO,则可以查找具有链接的 GPO 和没有链接的 GPO。没有链接的 GPO 是未链接的 GPO。

[玩转系统] 如何在 Active Directory 中查找(并删除)未链接的 GPOS

使用 PowerShell 查找未链接的 GPO

在 GPMC 中搜索 GPO 可能适用于少数 GPO,但如果您有数百或数千个 GPO 管理数千个端点,那么您将会遇到困难。在这种情况下,是时候自动化此过程并构建一个方便的 PowerShell 工具了。

假设您使用的是已加入本地域并安装了 RSAT 的 Windows PC:

1. 打开 Windows PowerShell 控制台。

2. 导入组策略模块。 GroupPolicy 模块随 RSAT 一起提供,并且应该已安装在您的系统上。该模块包含在 PowerShell 中使用 GPO 所需的所有命令。

Import-Module GroupPolicy

3. 使用 All 参数运行 Get-GPO PowerShell cmdlet。此 cmdlet 查询 AD 并返回找到的所有 GPO。

Get-GPO -All

[玩转系统] 如何在 Active Directory 中查找(并删除)未链接的 GPOS

4. 现在您可以查询域中的所有 GPO,您现在必须找出哪些 GPO 未链接。为此,请运行 Get-GPOReport cmdlet。此 cmdlet 允许您提供要返回的输出的名称和类型。

Get-GPOReport -Name SomeGPO -ReportType XML

手动复制并粘贴在上述步骤中找到的 GPO 名称之一,然后运行此命令。您将看到该 cmdlet 返回 GPO 具有的所有设置的 XML 报告。特别要注意名为 LinksTo 的部分,如下所示。此部分包含 SOMPath XML 节点,该节点表示其链接到的 OU 的路径。

[玩转系统] 如何在 Active Directory 中查找(并删除)未链接的 GPOS

Get-GPOReport cmdlet 一次只能获取单个 GPO 的报告。此 cmdlet 仅包含来自域的搜索结果,而不包含来自 AD 站点的搜索结果。

5. 现在您已经知道如何使用 Get-GPO 查找所有 GPO 以及用于发现它们链接到的内容的 cmdlet (Get-GPOReport),请通过复制将它们组合起来并将下面的 PowerShell 命令粘贴到控制台中。

以下命令查询域中的所有 GPO (Get-GPO),然后为每个 GPO 生成 XML 报告 (Get-GPOReport),仅允许那些不存在的 GPO报告中没有要返回的 字符串 (Select-String)。

Get-GPO -All | Where-Object {
     $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch "<LinksTo>"
 }

在教程的环境中,您可以在下面的示例中看到 UnlinkedGPO1UnlinkedGPO2 未链接到任何 OU。

[玩转系统] 如何在 Active Directory 中查找(并删除)未链接的 GPOS

构建未链接的 GPO PowerShell 工具

现在,让我们将您学到的所有内容放在一起,构建一个您可能在现实世界中使用的 PowerShell 脚本。

1. 打开您最喜欢的代码编辑器并将以下 PowerShell 脚本复制/粘贴到其中。将脚本保存为Remove-UnlinkedGPO.ps1。这个脚本:

  • 创建一个包含当前日期的文件夹来存储未链接的 GPO 报告。
  • 查找 AD 中所有未链接的 GPO。
  • 为每个未链接的 GPO 创建 HTML 报告并将其保存到磁盘。
  • 创建所有未链接 GPO 的列表并将其附加到文本文件。
  • 使用 Remove-GPO cmdlet 进行确认步骤,删除每个未链接的 GPO。

您还可以通过 GitHub 下载Remove-UnlinkedGPO.ps1 脚本。

Import-Module GroupPolicy
 $Date = Get-Date -Format dd_MM_yyyy
 $BackupDir = "c:\GPOBackup$Date"
## Creates a directory to store the GPO reports
 if (-Not(Test-Path -Path $BackupDir))  {
   New-Item -ItemType Directory $BackupDir -Force
 }
# Get all GPOs with the gpo report type as XML and also look for the section  in the xml report.
# Consider only the GPOs that doesnt have  section.
 Get-GPO -All | Where-Object { $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch "<LinksTo>" } | ForEach-Object {
   # Backup the GPO, HTML report and saving the GPO details to text file are optional.
   Backup-GPO -Name $_.DisplayName -Path $BackupDir
    # Run the report and save as an HTML report to disk
   Get-GPOReport -Name $_.DisplayName -ReportType Html -Path "$BackupDir$($_.DisplayName).html"
   # Create and append to a text file called UnlinkedGPOs.txt in the backup folder that
   # contains each GPO object that Get-GPO returns
   $_ | Select-Object * | Out-File "$BackupDir\UnLinkedGPOs.txt" -Append
   # Remove the GPO but first prompt before removing
   $_.Displayname | Remove-GPO -Confirm
 }

2. 执行Remove-UnlinkedGPO.ps1脚本。

3. 如果发现未链接的 GPO,脚本将提示您将其删除。此提示来自使用 Confirm 开关的 Remove-GPO cmdlet。要确认删除该单个 GPO,请单击,否则,单击全部是即可删除所有未链接的 GPO,无需进一步确认。

[玩转系统] 如何在 Active Directory 中查找(并删除)未链接的 GPOS

脚本完成并发现至少一个未链接的 GPO 后,您应该在 C:\GPOBackup\ 文件夹中看到 GPO 内容作为 GUID 文件夹以及 HTML 报告和

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

取消回复欢迎 发表评论:

关灯