使用PowerShell创建Active Directory组策略报告(GPO)

使用 PowerShell 創建 Active Directory 群組策略報告。通過 Get-GpoReport cmdlet 的幫助,我們可以生成有關群組策略(GPO)的報告,從簡單的基於文本的報告到完整的超文本標記語言(HTML)報告。此外,我們可以使用 PowerShell 自動化此報告生成過程。這樣可以節省時間並獲取有關您的Active Directory(AD)系統的重要信息。在本文中,我們將介紹如何導入 PowerShell GPO 模塊,導出 GPO 並將 GPO 鏈接到組織單元(OU)。這將作為一個示例,以便它們共同工作來生成一些一流的報告。

我們應該從如何使用 PowerShell 創建 Active Directory 策略報告開始嗎?

使用 PowerShell 創建 AD Group Policy 報告(GPO)

先決條件

在本文中,我們將討論一些涉及創建和修改現有 GPO 的情況。如果您想按照示例進行操作,請確保已經具備以下條件:

  • Group Policy 的 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.
  • 一台加入域並具有讀取 GPO 權限的域用戶帳戶的 AD 加入計算機。

使用 Get-GpoReport 生成 HTML 報告

首先,讓我們想像一下我們有一個單一的GPO。因此,你想要查看它的設置(以及生成一個HTML報告)以開始進行。幸運的是,Get-GpoReport可以發現GPO並利用PowerShell導出它們。為了做到這一點,我們需要GPO的名稱或GPO的全球唯一標識符(GUID)。

因此,您需要使用至少三個參數來創建詳細的HTML報告:

  • 用於定位GPO的名稱或Guid。
  • ReportType參數用於指定要生成的報告類型。我們可以在HTML或XML(可擴展標記語言)之間進行選擇。
  • Path用於指定我們想要將報告保存到的位置。

也許您的環境中有一個 GPO。例如,如果我們知道GPO的名稱,我們可以為報告類型指定值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報告

或者,要為GPO創建一個整個域報告。在這種情況下,我們必須使用全部引數來查詢域中的每個GPO。然而,這一次,我們不是使用名稱Guid選項來指定特定的GPO,而是使用全部開關參數來找到它們。

Get-GPOReport -All -ReportType Html -Path "C:\Temp\All-SampleReport.html"

AD環境中使用時,Get-GPOReport cmdlet 會聯繫由伺服器參數指定的域控制器(DC)來讀取GPO。之後,如果沒有伺服器可用,將默認使用具有PDC模擬器角色的DC。

接下來是如何使用PowerShell創建ActiveDirectory策略報告,生成XML報告。

使用 Get-GpoReport 生成 XML 報告

一般來說,一旦我們在 PowerShell 中導入GPO 模組,Get-GPOReport 還可以做其他事情。這意味著除了導出 GPO 並生成HTML 報告之外,我們還可以生成 XML 報告。例如,如果我們想要為特定的 GPO 創建一份XML 報告,我們需要修改 ReportType 參數的值,從 HTML 修改為 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報告中。但它們結構更清晰,更容易解析。

  • 版本目錄 GPO存儲在 AD數據庫中的版本。
  • 版本Sysvol – 存儲在 SYSVOL的GPO版本。
  • 已啟用 – 如果禁用,客戶端計算機上的GPO處理引擎將不應用策略相應部分中的設置。

重要的是,當我們修改GPO時,策略版本(計算機或用戶)會增加。因此,組策略處理引擎可以確定何時應用新設置以及何時策略已更改。此外,此行為將允許我們在更改GPO後啟動gpupdate.exe而無需使用聯合/force開關。

另請參閱 Active Directory管理

使用InfraSOS檢查Active Directory組策略報告

試用免費,訪問所有功能。– 200多個AD報告模板可用。輕鬆自定義您自己的AD報告。




GMPC

我們可以在GPMC中查看GPO版本(用於AD和SYSVOL)及其狀態。

此外,即使 VersionDirectoryVersionSysvol 的值为 0,而 Enabledtrue,客戶端電腦仍會處理一個策略。系統會通知處理引擎我們不需要實施 GPO 的相關部分。改變配置不會對相對較短的網絡上的快速電腦的性能產生太大影響。即便如此,它仍然可以節省許多寶貴的秒數,尤其是對於較老的機器和較慢的網絡。

因此,客戶端機器上的處理引擎將不應用具有 VersionDirectoryVersionSysvol 大於 0Enabled 設置為 false 的策略。我們可能會問為什麼某些設置不應用。因此,重要的是調查這是否是一個意外還是有意的。

假設我們熟悉 GPO 的內部運作方式。在這種情況下,我們可以使用 Get-GPOReport 命令。這樣可以直接通過引用屬性來檢查這些設置,而不是導航到 GPMC。

或者,我們可能希望專注於 GPO 中的一些設置。或者最終我們希望使用 PowerShell 將 GPO 附加到 OU,這樣我們就不需要創建報告。

  1. 在這種情況下,請移除Path參數。注意[xml]的轉換以及下面的例子中沒有Path參數。
[xml]$GpoXml = Get-GPOReport -Name 'Sample GPO' -ReportType Xml

2. 現在我們已經將Get-GPOReport's的輸出轉換成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創建Active Directory策略報告的博客文章。讓我們總結一下。

使用PowerShell創建Active Directory群組策略報告結論

除了本機的群組策略管理控制台(GPMC)外,本文還介紹了將群組策略以HTML和XML格式匯出以生成全面報告的方法。我們還討論了Get-GpoReport cmdlet。這個cmdlet現在可以通過PowerShell檢索與GPMC相同的信息,這使我們能夠同時查詢多個GPO,這肯定有助於構建出色的報告。

Source:
https://infrasos.com/create-active-directory-policy-reports-with-powershell/