目的是批量查询或查询某个电脑的组策略结果。


获取组策略结果:

客户端上:

客户端上可以用两个命令查看:


Gpresult

一般用这个就好:

Gpresult /r /scope user or computer 


 【AD】域组策略结果查询_xml



下面是详细版的:

gpresult /h c:\abc\abc.html /f 

 【AD】域组策略结果查询_html_02


 【AD】域组策略结果查询_html_03


 【AD】域组策略结果查询_User_04

会有错误报告

也可以使用/scope user or computer 只查看用户或计算机。



RSOP.msc

 【AD】域组策略结果查询_html_05



默认帐号没有管理员权限是看不到计算机策略。必须要登录一个有管理员权限的帐号。

当然也可以直接看效果。

比如用一些脚本去确认组策略的直接效果。







DC

Powershell获取组策略信息组策略结果分析组策略

Links:

 https://devblogs.microsoft.com/scripting/use-powershell-to-generate-and-parse-a-group-policy-object-report/

 https://devblogs.microsoft.com/scripting/use-powershell-to-find-group-policy-rsop-data/#admin-rights-required

 https://adamtheautomator.com/powershell-export-gpo/


Get-Gpo -name “gponame”

 【AD】域组策略结果查询_html_06


可以获取一些基础的信息,AdVersion,SysvolVersion等。



#ADVersion&SysvolVersion解释

ADVersion是GPM内的版本号,Sysvolversion是SYSVOL内存储的组策略文件的版本号,两个版本号必须一致。

Sysvol在如下位置:

C:\Windows\SYSVOL\domain\Policies

 【AD】域组策略结果查询_html_07


这里存储着所有的组策略实体文件。

客户端获取组策略就是访问的这里,或者其他DC的这个位置的文件。


#Get-gporeport

用这个可以直接看到应用过的设置。


#HTML

Get-GPOReport -Name "WMI TEST For Win10 Only" -ReportType html -Path d:\gporeport.html 

 【AD】域组策略结果查询_User_08



 【AD】域组策略结果查询_xml_09

可以查看LinkedOu等信息。


最重要的是可以看到那个组策略里的配置。

 【AD】域组策略结果查询_xml_10


这在接手其他人的域控的时候特别重要。


#Powershell-export gporeport.html individually 

$a=Get-Date -Format "yyyyMd" 

$path="D:\GPOreport"

New-Item $path -ItemType Directory -Name $a

$names = (Get-GPO -All).DisplayName

foreach ($name in $names) 

{

$c="$name.html"

Get-GPOReport -Name $name -Path $path\$a\$c -ReportType Html

}

效果如图:

 【AD】域组策略结果查询_html_11


可以做成每日定时任务

#XML


[xml]$xml=Get-GPOReport -Name "Computer-Notify User When Pasword Exipres in 7 Days" -ReportType xml 

用这个命令可以把XML内容变成Powreshell的viriable变量$xml


下面的脚本把每个组策略的AD和SYS.Version标注并且把计算机和用户的启用状态标识出来

# Retrieve all GPOs (not all GPO Reports!)

$AllGpos = Get-GPO -All

# Create a custom object holding all the information for each GPO component Version and Enabled state

$GpoVersionInfo = foreach ($g in $AllGpos) {

[xml]$Gpo = Get-GPOReport -ReportType Xml -Guid $g.Id

[PSCustomObject]@{

"Name" = $Gpo.GPO.Name

"Comp-Ad" = $Gpo.GPO.Computer.VersionDirectory

"Comp-Sys" = $Gpo.GPO.Computer.VersionSysvol

"Comp Ena" = $Gpo.GPO.Computer.Enabled

"User-Ad" = $Gpo.GPO.User.VersionDirectory

"User-Sys" = $Gpo.GPO.User.VersionSysvol

"User Ena" = $Gpo.GPO.User.Enabled

}

}

# See the result

$GpoVersionInfo | Sort-Object Name | Format-Table -AutoSize -Wrap


效果如图: 

 【AD】域组策略结果查询_User_12




把每个GPO link的OU标注出来

# Retrieve all GPOs (not all GPO Reports!)

$AllGpos = Get-GPO -All

# Create a custom object holding all the GPOs and their links (separate for each distinct OU)

$GpoLinks = foreach ($g in $AllGpos){

[xml]$Gpo = Get-GPOReport -ReportType Xml -Guid $g.Id

foreach ($i in $Gpo.GPO.LinksTo) {

[PSCustomObject]@{

"Name" = $Gpo.GPO.Name

"Link" = $i.SOMPath

"Link Enabled" = $i.Enabled

}

}

}

# See all the GPOs and the links for each

$GpoLinks | Sort-Object Name


 【AD】域组策略结果查询_xml_13



#Get-GPResultantSetOfPolicy

收集用户客户端上的组策略结果分析。


#HTML

Get-GPResultantSetOfPolicy -Computer HV_Win11_0131.kaedeleo.com -User abc -ReportType html -Path D:\Gpotest\us+comp.html


导出目标计算机的计算机和(可指定)用户策略。要求用户在线且防火墙端口开启过。

 【AD】域组策略结果查询_User_14



和GPM组策略结果是一个东西。

 【AD】域组策略结果查询_html_15


#XML

Get-GPResultantSetOfPolicy -Computer HV_Win11_0131.kaedeleo.com -User abc -ReportType xml -Path D:\Gpotest\us+comp.xml


[xml]$xml=Get-Content D:\Gpotest\us+comp.xml 


$xml.DocumentElement.ComputerResults.GPO | select @{LABEL=”LinkOrder“;EXPRESSION={$_.link.linkorder}},name,extensionname | sort {[int]$_.linkorder} 


效果是获取目标计算机的组策略信息,变成PS的变量,读取其中的Linkorder顺序(为了排错组策略)。

Output:

 【AD】域组策略结果查询_html_16

LinkOrder是组策略应用的顺序,可以帮助排错。




#组策略结果

对比Powershell的唯一优势是选User那一步可以直接选择目标计算机登陆过的账号。







DC上打开组策略管理

 【AD】域组策略结果查询_xml_17



继续下一步

 【AD】域组策略结果查询_html_18




 【AD】域组策略结果查询_xml_19


 【AD】域组策略结果查询_xml_20



 【AD】域组策略结果查询_html_21




 【AD】域组策略结果查询_User_22




查看RSOP

 【AD】域组策略结果查询_User_23



 【AD】域组策略结果查询_html_24



如果需要查询最新的结果就重新运行即可。



#Gpresult命令

用Powershell来替代

使用 GPRESULT 列出已应用的策略

在开始测试策略问题之前,请确保没有歪曲结果的未采用的策略。从运行 Gpupdate/force 确保应用最新的策略开始。然后可以使用 gpresult 命令列出当前应用于相关用户和/或计算机的 GPO。以下列表显示了 gpresult 可用的一些交换机示例:

gpresult /s ComputerName /user Domain\UserName /r
列出指定用户登录到指定计算机时已应用 GPO 的摘要。

gpresult /s ComputerName /user Domain\UserName /r /scope user
仅列出上述报告中的用户策略。忽略计算机策略。

gpresult /s ComputerName /user Domain\UserName /h gpreport.html
生成与第一个示例相同的报告,但将其保存在 HTML 文件中。

gpresult /s ComputerName /u domain\UserCred /p p@ssW23 /user Domain\UserName /r
生成与第一个示例相同的报告,但使用指定的凭据来运行命令。

gpresult /s ComputerName /user Domain\UserName /z > policy.txt
生成一份非常详细的用户和计算机策略设置报告,并将其保存在文本文件中。

请记下 /u  /user 交换机之间的区别:/u 交换机用于指定用于运行 gpresult 命令的用户凭据,而 /user 交换机指定策略数据包含在报告中的用户帐户。

/? 交换机提供了可用于 gpresult 的完整选项列表。

有关 gpresult 语法的详细信息,请参阅  Microsoft Gpresult TechNet 文章


 【AD】域组策略结果查询_User_25



参考链接:

 https://activedirectorypro.com/gpresult-tool/