使用 PowerShell 创建活动目录组策略报告。通过 Get-GpoReport
cmdlet 的帮助,我们可以生成关于组策略(GPO)的报告,范围从简单的基于文本的报告到完整的超文本标记语言(HTML)报告。此外,我们可以利用PowerShell自动化这一报告生成过程。这样做是为了节省时间并获得有关活动目录(AD)系统的重要信息。在本文中,我们将讨论如何导入PowerShell GPO模块,导出GPO,并将GPO链接到一个组织单位(OU)。这将作为一个例子,以便它们共同工作以产生一些顶级报告。
我们是否应该开始学习如何使用 PowerShell 创建活动目录策略报告。
使用PowerShell创建AD组策略报告(GPO)
先决条件
在本文中,我们将介绍涉及创建和修改现有GPO的几种不同情况。如果您想跟随示例进行操作,请确保您已经具备以下条件:
- 组策略的PowerShell模块。如果您使用的是Windows 10,我们可以通过下载和安装RSAT来找到这个模块,或者如果您使用的是Windows Server,我们可以使用下面的PowerShell命令:
Install-WindowsFeature -Name GPMC
- A computer member of the same AD domain from which we will query GPOs.
- 已加入AD的计算机,具有可以读取GPO的域用户帐户。
使用Get-GpoReport生成HTML报告
首先,让我们想象我们有一个单一的 GPO。因此,您想要查看它的设置(以及生成一个 HTML 报告)来启动事情。幸运的是,Get-GpoReport
可以发现一个 GPO 并利用 PowerShell 导出它们。为此,我们将需要 GPO 的名称或全局唯一标识符(GUID)。
因此,您需要至少使用三个参数来创建详细的 HTML 报告:
- 用于定位 GPO 的名称或 GUID。
- ReportType 参数用于指定要生成的报告类型。我们可以选择 HTML 或 XML(可扩展标记语言)之间。
- 路径参数用于指定希望保存报告的位置。
也许我们的环境中有一个 GPO。例如,如果我们知道 GPO 的名称,我们可以为 HTML 报告指定一个值为 HTML
的 HTML 报告以及您想要保存此 HTML 文件的路径,就像我们在这个示例中所做的那样。
Get-GPOReport -Name 'Sample GPO' -ReportType 'HTML' -Path 'C:\Temp\SampleReport.html'
另外,我们也可以使用 Guid
参数来查找 GPO,但这是一个额外的步骤,使用下面的示例。
$gponame = (Get-GPO -Name 'Sample GPO').Id
Get-GPOReport -Guid $gponame -ReportType 'HTML' -Path 'C:\Temp\SampleReport.html'
我们可以在报告准备完成后,使用您偏好的浏览器查看报告。
为所有GPO生成HTML报告
另外,为了创建一个域范围内的报告,在这种情况下,我们必须使用All
参数来查询域中的每个GPO。然而,这一次,我们不是使用Name
或Guid
选项来指定特定的GPO,而是使用All
开关参数来找到它们全部。
Get-GPOReport -All -ReportType Html -Path "C:\Temp\All-SampleReport.html"
当在AD环境中使用时,Get-GPOReport
cmdlet会联系由Server
参数指定的域控制器(DC)来读取GPOs。之后,如果没有服务器可用,默认会使用具有PDC Emulator角色的DC。
另请阅读Office 365用户报告
使用Get-GpoReport生成XML报告
例如,下面我们查询一个现有的GPO,示例报告
,以生成XML报告。然后,我们使用Invoke-Item
命令在XML文件的默认应用程序中打开该报告:
Get-GPOReport -Name 'Sample GPO' -ReportType Xml -Path "C:\temp\SampleReport.xml"
Invoke-Item -Path "C:\Temp\SampleReport.xml"
完成后,我们将看到类似于下面截图的XML文件。
首先,我们注意到 GPO XML 节点包含了所有内容。在其中,我们可以找到诸如标识符
(GPO GUID)、名称
(GPO 名称)、包括注释, 安全 描述符, SDDL
等等信息。
此外查看活动目录锁定用户报告
GPO XML 报告
除了格式之外,这个 XML 报告与 HTML 有何不同?基本上,HTML 报告中看到的属性也存在于 XML 报告中。但它们更加结构化和易于解析。
- VersionDirectory – 存储在 AD 数据库中的 GPO 版本。
- VersionSysvol – 存储在 SYSVOL 中的 GPO 版本。
- Enabled – 如果禁用,客户端计算机上的 GPO 处理引擎将不会应用策略相应部分中的设置。
重要的是,当我们修改 GPO 时,策略版本(计算机或用户)会增加。因此,组策略处理引擎可能会确定何时应用新设置以及何时策略已更改。此外,此行为将允许我们在更改 GPO 后启动 gpupdate.exe 而不使用联合 /force 开关。
使用 InfraSOS 检查 Active Directory 组策略报告
免费试用我们,获取所有功能。- 提供 200 多个 AD 报告模板。轻松定制您自己的 AD 报告。
GMPC
我们可以在 GPMC 中查看 GPO 版本(适用于 AD 和 SYSVOL)及其状态。
此外,即使VersionDirectory
和VersionSysvol
的值为0
,Enabled
为true
,客户端计算机仍会处理策略。系统将通知处理引擎我们不需要实施GPO的相关部分。更改配置不会对相对较短网络上的快速计算机的性能产生影响。即便如此,它仍然可以节省大量这些宝贵的GPO秒数,特别是对于较慢网络上的旧机器。
因此,客户端计算机上的处理引擎将不会应用VersionDirectory
和VersionSysvol
高于0
但Enabled
设置为false
的策略。我们可能会问为什么某些设置不适用。因此,有必要调查这是意外还是有意为之。
假设我们熟悉GPO的内部工作原理,我们可以使用Get-GPOReport
命令。因此,这是通过引用属性直接检查这些设置,而不是导航到GPMC。
或者,我们可能希望专注于GPO中的一些设置。或者最终我们想要使用PowerShell将GPO附加到OU,这样我们就不需要创建报告。
- 在这种情况下,删除
Path
参数。注意[xml]
转换和下面示例中Path
参数的缺失。
[xml]$GpoXml = Get-GPOReport -Name 'Sample GPO' -ReportType Xml
2. 现在我们已经将Get-GPOReport
的输出转换为 XML 对象,我们可以使用简短的点表示法快速引用其许多属性。
$GpoXml.GPO.Computer
$GpoXml.GPO.User
3. 添加一个foreach
循环,并使用All
参数来遍历每个 GPO 输出。
$AllGpos = Get-GPO -All
$GpoVersionInfo = foreach ($gpo in $gpos) {
[xml]$g = Get-GPOReport -ReportType Xml -Guid $gpo.Id
[PSCustomObject]@{
"Name" = $g.GPO.Name
"Comp-Ad" = $g.GPO.Computer.VersionDirectory
}
}
$GpoVersionInfo | Sort-Object Name | Format-Table
也可阅读活动目录报告工具
解析 XML GPO 报告
我们可以使用Get-GPOReport
生成的 XML 输出了解 GPO 的许多方面。在上一个示例中,如果我们查看前一个模型的$GPOXML.GPO.Computer
和$GPOXML.GPO.User
属性,我们将看到如下所示的ExtensionData
属性。
如下所示,我们可以通过在 PowerShell 中访问这些 XML 节点来开始基于 XML 数据创建您的报告。
$PolicyDetails = foreach ($policy in $GpoXml.GPO.User.ExtensionData.Extension.Policy) {
[PSCustomObject]@{
"Name" = $policy.Name
"State" = $policy.State
}
}
$PolicyDetails
感谢您阅读我们关于如何使用 PowerShell 创建活动目录策略报告的文章博客。 让我们总结一下。
另请阅读活动目录锁定用户报告
使用 PowerShell 创建活动目录组策略报告 结论
除了本地的组策略管理控制台(GPMC)外,本文还讨论了通过导出HTML和XML格式生成全面报告的方法。我们还讨论了 Get-GpoReport
命令。这个 命令 现在可以通过 PowerShell 检索与 GPMC 相同的信息。这使我们能够同时查询许多 GPO,这肯定会帮助构建出色的报告。
Source:
https://infrasos.com/create-active-directory-policy-reports-with-powershell/