Windows AD PowerShell(十五):GPO 相关

1898 字
9 分钟
Windows AD PowerShell(十五):GPO 相关

这是 Windows AD PowerShell 学习记录的第十五节。排查 GPO 时,先区分 GPO 对象本身、它链接到了哪里,以及客户端最终有没有应用。有 GPO 不代表已经链接;链接到了 OU,也不代表目标一定通过了安全筛选和 WMI 筛选。

**数据来源说明:**2026 年 9 月 28 日通过已有的 ldap3 环境对实验域 qy.net 做了只读查询,确认了 5 个 GPO 对象及部分 OU、域根上的 gPLink。下面“按 VM 目录数据整理”的输出是 PowerShell 格式示例,不是已在 VM PowerShell 控制台执行的结果。Get-GPOReport、Backup-GPO 和 gpresult 本节均未执行,未创建报告、备份或修改策略。

十五、GPO 相关#

15.1 先确认模块与查询范围#

以下 Get-GPO、Get-GPInheritance 等命令属于 GroupPolicy 模块,需要在已安装 GPMC/RSAT 的管理机或域控上运行,并具有相应读取权限。它与第三、四节使用的 ActiveDirectory 模块不是同一个模块。

Terminal window
# 检查是否有 GroupPolicy 模块
Get-Module -ListAvailable GroupPolicy |
Select-Object Name,Version,Path
# 若没有输出,先检查是否安装 GPMC / RSAT;本节未在 VM PowerShell 执行

在子域或多域环境中,默认查询的是当前身份所属的域;需要时给 Get-GPO 等命令显式指定 -Domain 'qy.net'。这也能避免把“别的域中查不到”误认为 GPO 被删。

15.2 查看所有 GPO#

Terminal window
Get-GPO -All |
Select-Object DisplayName,Id
# 按 VM 目录查询结果整理的格式示例,非 PowerShell 实机直出
DisplayName Id
----------- --
Default Domain Policy 31b2f340-016d-11d2-945f-00c04fb984f9
Policy-WSUS 51cebfee-ab77-4d9f-b4cd-6b9d78f4af87
Software-GPO 62c3d92c-9c6b-439b-bebf-e20016a31712
Default Domain Controllers Policy 6ac1786c-016f-11d2-945f-00c04fb984f9
Policy-User d5199290-648b-49fa-a341-1088b2d4288b

**VM 实测:**目录中有这 5 个 GPO 对象。这里只能证明对象存在,不能仅凭这个列表判断谁会收到策略。

15.3 查看某个 GPO 的信息#

Terminal window
Get-GPO -Name 'Default Domain Policy' |
Select-Object DisplayName,Id,DomainName
# 按 VM 目录查询结果整理的格式示例,非 PowerShell 实机直出
DisplayName Id DomainName
----------- -- ----------
Default Domain Policy 31b2f340-016d-11d2-945f-00c04fb984f9 qy.net

Get-GPO 还可查看创建时间、修改时间、用户与计算机配置版本等;若显示名重名,最好用 GUID 定位。版本号变化也不能单独证明客户端已经应用策略,客户端结果要用后面的 gpresult 查。

15.4 查看 GPO 链接与继承#

以 浅月 所在管理用户 OU 为例:

Terminal window
Get-GPInheritance `
-Target 'OU=User,OU=Admin,OU=Organization,DC=qy,DC=net' |
Select-Object Path,GpoInheritanceBlocked,GpoLinks,InheritedGpoLinks
# 这条命令未在 VM PowerShell 中执行;具体集合显示与顺序以现场结果为准

重点看两个属性:

属性该看什么
GpoLinks直接链接到目标 OU 的 GPO,包含禁用的链接
InheritedGpoLinks在该位置参与处理的已启用链接列表,既可能包含本 OU 的直接链接,也可能包含上级继承的链接
GpoInheritanceBlocked目标 OU 是否阻止普通上级链接的继承;被强制的链接不受阻止继承影响

VM 目录只读核对:目标 OU=User,OU=Admin,... 本身没有直接 GPO 链接;上级 OU=Admin,... 链有 Policy-User,OU=Organization,... 链有 Software-GPO,域根链有 Policy-WSUS 和 Default Domain Policy。这只是链接层面的候选关系,具体客户端是否应用仍要看 GPO 启用状态、安全筛选、WMI 筛选与实际处理结果。

只想看这个 OU 直接链接了什么,可展开 GpoLinks:

Terminal window
Get-GPInheritance `
-Target 'OU=User,OU=Admin,OU=Organization,DC=qy,DC=net' |
Select-Object -ExpandProperty GpoLinks
# 当前 VM 目录中该 OU 没有直接 gPLink;预期无输出

💡 GPO 是独立对象,链接是另一层关系。Get-GPO -All 查到 Policy-User,并不能说明它链接到了某台计算机所在 OU。计算机策略看计算机对象的 OU 路径;用户策略通常看用户对象的 OU 路径。需要进一步研究例外时再看环回处理(Loopback)。

15.5 导出 GPO 报告#

报告适合在改动前留档,能查看设置、链接、权限和筛选信息:

Terminal window
# 路径是运行命令的管理机本地路径,先确保目录存在
New-Item -ItemType Directory -Path 'C:\Temp\GPOReports' -Force | Out-Null
Get-GPOReport `
-Name 'Default Domain Policy' `
-ReportType Html `
-Path 'C:\Temp\GPOReports\Default-Domain-Policy.html'
# 成功时报告写入文件;本节未在 VM 上生成此文件

Get-GPOReport 是配置报告,不是“某台客户端实际应用了什么”的报告。后者要在目标机器上运行 gpresult。

15.6 改动前备份 GPO#

Terminal window
# 先准备备份目录;实际环境应放在受控、可离线保存的位置
New-Item -ItemType Directory -Path 'C:\GPOBackup' -Force | Out-Null
Backup-GPO -All -Path 'C:\GPOBackup' |
Select-Object DisplayName,GpoId,Id
# 成功时会为每个 GPO 返回一条备份记录;GpoId 是策略 GUID,Id 是本次备份 GUID
# 本节未执行、未生成实际备份 ID

⚠️ **改 GPO 前先备份,但不要把备份误当成完整域灾备。**备份耗时取决于策略数量、SYSVOL 内容、网络与磁盘情况,不能保证“只要几秒”。GPO 备份也不能替代 AD/System State 备份;恢复后还应核对 OU 链接、继承与目标端结果。域控备份见第十一节:备份与恢复。

本节不直接演示 Restore-GPO:恢复会更改实际策略,学习时先在实验环境核对备份内容、目标 GPO、审批和回退方案。

15.7 排查“GPO 已链接,却没有生效”#

先在管理端确认目标对象所在 OU,再看该 OU 的链接与继承:

Terminal window
# 计算机策略先看计算机对象位置;用户策略则换用 Get-ADUser
Get-ADComputer -Identity 'QYNET-USER01' |
Select-Object Name,DistinguishedName
# 按 VM 目录查询结果整理的格式示例,非 PowerShell 实机直出
Name DistinguishedName
---- -----------------
QYNET-USER01 CN=QYNET-USER01,OU=Computer,OU=Admin,OU=Organization,DC=qy,DC=net

然后在目标计算机上运行:

Terminal window
# 文本版先快速看计算机策略
gpresult /r /scope computer
# 本节未在目标机执行;请查看“应用的组策略对象”和“被拒绝的组策略对象”

需要更完整的明细时再导出 HTML:

Terminal window
New-Item -ItemType Directory -Path 'C:\Temp' -Force | Out-Null
gpresult /h C:\Temp\gpresult.html
# 成功时生成 C:\Temp\gpresult.html;本节未在目标机执行

如果策略刚修改,可在目标机运行 gpupdate /force 后再查,但有些设置仍需注销或重启才能最终生效。

现象下一步
GPO 根本不在适用范围查对象所在 OU、站点/域/OU 链接、链接启用状态与继承阻止
出现在“被拒绝”列表看具体拒绝原因,再查安全筛选、读取/应用权限和 WMI 条件
出现在“已应用”列表,但设置没达到预期查策略冲突、优先级、客户端扩展、事件日志、是否需注销/重启
同一 OU 中部分机器有效、部分无效比对计算机账户组归属、WMI 结果、GPO/SYSVOL 可达性与刷新时间

注意:**没有链接到目标范围的 GPO,不一定会出现在 gpresult 的“被拒绝”列表。**不能只凭“被拒绝列表里找不到它”就判断策略链路正常。若怀疑 SYSVOL 或域控复制问题,再看第五节:复制健康和第六节:dcdiag 健康检查。

15.8 一道小排障题#

Get-GPO -Name 'Policy-User' 查得到策略,但 USER01 登录后仍没有得到预期的用户设置。你按什么顺序查?

先确认用户对象实际所在 OU;再用 Get-GPInheritance 看该 OU 的直接与继承链接;接着在 USER01 的该用户会话运行 gpresult /h,看适用与拒绝原因;最后查安全筛选、WMI、冲突和客户端事件日志。“GPO 对象存在”只完成了第一步。

参考资料#


上一篇:Windows AD PowerShell(十四):清理与维护

下一篇:Windows AD PowerShell(十六):跨域与跨林信任

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Windows AD PowerShell(十五):GPO 相关
https://springtsuki.xucjno.com/posts/springtsuki/notes/windowsad/powershell/928-gpo/
作者
SpringTsuki
发布于
2026-09-28
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
SpringTsuki
你好,我是浅月。
公告
浅月的开发小窝!欢迎你来到这里!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
56
分类
9
标签
42
总字数
188,888
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录