正文
在我們真正開始修改GPO之前,我們需要嘗試理解一些關于它們是如何在GPMC和AD中正常更新的復雜問題。因為請相信我,事情并沒有看上去那么簡單。
當你首先創建一個GPO并命名它,然后查看它的“Details”選項卡時,你會看到它有以下User和Computer版本字段:# (AD), # (SYSVOL)。
對于每個GPO,在硬盤的C:WindowsSYSVOLdomainPolicies<guid>
上,也有相應的路徑(稱為組策略模板(Group Policy Template))。對于這個GPO,它會是C:WindowsSYSVOLdomainPolicies{F3003ADC-17E3-4FBE-A11E-6A41779ADD6E}
。對于域成員,你還可以通過它的網絡共享訪問SYSVOL,例如,\testlab.localSYSVOLtestlab.localPolicies{F3003ADC-17E3-4FBE-A11E-6A41779ADD6E}
。
在GPT中,有一個Machine和User目錄以及一個GPT.INI文件。
PS > ls "\testlab.localSYSVOLtestlab.localPolicies{F3003ADC-17E3-4FBE-A11E-6A41779ADD6E}"
Directory: \testlab.localSYSVOLtestlab.localPolicies{F3003ADC-17E3-4FBE-A11E-6A41779ADD6E}
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 13/01/2019 11:13 Machine
d----- 13/01/2019 11:13 User
-a---- 13/01/2019 11:13 59 GPT.INI
很明顯,Computer策略被放入Machine中而User策略被放在User中。
GPT.INI是一個非常簡單的文件,它包含:
PS > cat "\testlab.localSYSVOLtestlab.localPolicies{F3003ADC-17E3-4FBE-A11E-6A41779ADD6E}GPT.INI"
[General]
Version=0
displayName=New Group Policy Object
請注意,displayName參數不會改變
ˉ_(ツ)_/ˉ
。
如果我們對GPO進行一些修改并刷新GPMC,我們可以看到Computer的AD和SYSVOL編號已經增大了。
每次修改后,它們似乎都在增大,但是由于GPMC在后臺做了一些不可見的操作,除非你使用Process Monitor之類的方法進行監視,所以看起來很小的改動會導致很大的變化。
AD和SYSVOL值存儲在不同的地方,但是理解它們非常重要。
SYSVOL保存在GPT.INI文件中。如果我們再次查看,就會發現版本已經變了。
PS > cat "\testlab.localSYSVOLtestlab.localPolicies{F3003ADC-17E3-4FBE-A11E-6A41779ADD6E}GPT.INI"
[General]
Version=12
displayName=New Group Policy Object
如果你有一個同時應用Computer和User策略的GPO,它會變得更加復雜,因為GPT.INI的數字格式會發生變化。
PS > cat "\testlab.localSYSVOLtestlab.localPolicies{F3003ADC-17E3-4FBE-A11E-6A41779ADD6E}GPT.INI"
[General]
Version=65548
displayName=New Group Policy Object
version = [user verion][computer version]
,其中每個值都為16位。
要“翻譯”它們,我們首先將十進制轉換為十六進制。用科學模式的計算器,結果是1000C。但是因為它們是16位數字,所以實際上是0001000C,因為計算器不顯示前導零。
所以0001是1,000C是12。
AD編號保存為AD中組策略對象的屬性。可以通過Powerview查看它,如下所示:
PS > Get-DomainGPO -Identity "Test GPO" -Properties VersionNumber
versionnumber
-------------
65548
它使用完全相同的格式。
在GPMC中修改GPO時,它將更新SYSVOL中的相應文件,更新GPT.INI中的值,然后更新它在AD中的versionnumber屬性。
要修改不帶GPMC的GPO,必須進入SYSVOL并手動修改文件。例如:如果我們想使用Restricted Groups部署一些新的本地管理員,我們必須修改C:WindowsSYSVOLdomainPolicies{F3003ADC-17E3-4FBE-A11E-6A41779ADD6E}MachineMicrosoftWindows NTSecEditGptTmpl.inf
。
更新文件而不增加AD或SYSVOL版本號的限制是:
要使所有客戶端能夠將修改作為其常規組策略更新計劃的一部分,必須手動增加AD和SYSVOL版本號。
這對于GPT.INI來說很容易,因為它只是一個文本文件。versionnumber屬性可以通過Powerview更新:
PS > Get-DomainGPO -Identity "Test GPO" | Set-DomainObject -Set @{'versionnumber'='1337'}
PS > Get-DomainGPO -Identity "Test GPO" -Properties VersionNumber
versionnumber
-------------
1337
必須始終保持兩個值相同,否則會導致AD / SYSVOL Version Mismatch
錯誤。