求可导出含应用链接的所有GPO设置的脚本/工具
导出包含链接信息的GPO设置到CSV的PowerShell脚本
下面提供两个PowerShell脚本,分别用于导出GPO的摘要信息(含链接)和详细设置(含链接),解决你之前脚本无法导出GPO链接的问题。
脚本1:导出GPO摘要及链接信息
这个脚本会导出每个GPO的基本属性、设置摘要,以及所有关联的OU链接信息:
# 设置输出文件路径 $outputPath = "C:\Temp\GPO_Summary_With_Links.csv" # 获取域内所有GPO $allGPOs = Get-GPO -All # 初始化结果集合 $gpoResults = @() foreach ($gpo in $allGPOs) { # 获取当前GPO的所有链接信息 $gpoLinks = Get-GPLink -Guid $gpo.Id | Select-Object OU, Enabled, Enforced, Order # 生成GPO的XML报告,提取配置摘要 $gpoReport = Get-GPOReport -Guid $gpo.Id -ReportType Xml $xmlReport = [xml]$gpoReport # 整理计算机配置的扩展设置摘要 $computerSettings = $xmlReport.GPO.Computer.ExtensionData | ForEach-Object { [PSCustomObject]@{ ExtensionName = $_.Name SettingCount = ($_.Extension.Settings | Measure-Object).Count } } | ConvertTo-Json -Compress # 整理用户配置的扩展设置摘要 $userSettings = $xmlReport.GPO.User.ExtensionData | ForEach-Object { [PSCustomObject]@{ ExtensionName = $_.Name SettingCount = ($_.Extension.Settings | Measure-Object).Count } } | ConvertTo-Json -Compress # 将链接信息转为JSON,避免CSV格式混乱 $linksJson = $gpoLinks | ConvertTo-Json -Compress # 构建结果对象 $gpoObject = [PSCustomObject]@{ GPOId = $gpo.Id GPODisplayName = $gpo.DisplayName GPOStatus = $gpo.GpoStatus CreationTime = $gpo.CreationTime ModificationTime = $gpo.ModificationTime Owner = $gpo.Owner ComputerSettingsSummary = $computerSettings UserSettingsSummary = $userSettings GPOLinks = $linksJson } $gpoResults += $gpoObject } # 导出到CSV $gpoResults | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8 Write-Host "导出完成,文件路径:$outputPath"
脚本2:导出GPO详细设置及链接信息
如果需要查看每个GPO的具体设置项和对应的链接信息,可以使用这个脚本,每个设置项会关联所有链接OU的信息:
# 设置输出文件路径 $outputPath = "C:\Temp\GPO_Detailed_Settings_With_Links.csv" # 获取域内所有GPO $allGPOs = Get-GPO -All # 初始化结果集合 $detailedResults = @() foreach ($gpo in $allGPOs) { # 获取当前GPO的所有链接信息 $gpoLinks = Get-GPLink -Guid $gpo.Id | Select-Object OU, Enabled, Enforced # 生成GPO的XML报告,提取详细设置 $gpoReport = Get-GPOReport -Guid $gpo.Id -ReportType Xml $xmlReport = [xml]$gpoReport # 处理计算机配置的详细设置 if ($xmlReport.GPO.Computer.ExtensionData) { foreach ($extension in $xmlReport.GPO.Computer.ExtensionData) { foreach ($setting in $extension.Extension.Settings) { foreach ($link in $gpoLinks) { $detailedResults += [PSCustomObject]@{ GPOId = $gpo.Id GPODisplayName = $gpo.DisplayName ConfigurationType = "Computer" ExtensionName = $extension.Name SettingName = $setting.Name SettingValue = $setting.Value -join "; " LinkedOU = $link.OU LinkEnabled = $link.Enabled LinkEnforced = $link.Enforced } } } } } # 处理用户配置的详细设置 if ($xmlReport.GPO.User.ExtensionData) { foreach ($extension in $xmlReport.GPO.User.ExtensionData) { foreach ($setting in $extension.Extension.Settings) { foreach ($link in $gpoLinks) { $detailedResults += [PSCustomObject]@{ GPOId = $gpo.Id GPODisplayName = $gpo.DisplayName ConfigurationType = "User" ExtensionName = $extension.Name SettingName = $setting.Name SettingValue = $setting.Value -join "; " LinkedOU = $link.OU LinkEnabled = $link.Enabled LinkEnforced = $link.Enforced } } } } } } # 导出到CSV $detailedResults | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8 Write-Host "详细设置导出完成,文件路径:$outputPath"
使用注意事项
- 必须以域管理员权限运行PowerShell
- 确保已安装Group Policy PowerShell模块(默认在域控制器或安装了RSAT工具的客户端机器上可用)
- 可以根据需求修改脚本中的
$outputPath变量,指定自定义的导出路径
内容的提问来源于stack exchange,提问作者richa kumari
相关产品推荐
相关产品推荐

