如何使用PowerShell报告Active Directory架构更改

對Active Directory(AD)模式進行更改可能導致操作問題。一般而言,模式不應該更改。但如果安裝了依賴於Active Directory的新應用程式,如Microsoft Exchange Server,則必須更新模式以支援該應用程式。為了保護AD的完整性,值得檢查只有經批准的模式更改才能進行。

使用PowerShell,可以輕鬆生成AD模式更改報告。但在運行本文中的代碼之前,請安裝Windows Server Active Directory的PowerShell模組。Active Directory PowerShell模組在域控制器(DC)上默認安裝。但最佳做法是從已加入域的Windows 10 PC執行日常管理任務。

廣告

安裝Windows Server Active Directory PowerShell模組

AD PowerShell模組是適用於Active Directory域服務的遠程伺服器管理工具(RSAT)的一部分。要安裝RSAT AD工具,請以本機管理員權限打開PowerShell提示符,並運行以下命令:

Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 –Online

工具安裝完成後,您可以關閉提升的PowerShell視窗。要運行本文中的其餘命令,您只需要使用屬於Active Directory“域使用者”組的帳戶登錄到Windows 10中。

有關在Windows 10中安裝RSAT的更多信息,請參閱Petri上的如何在Windows 10中安裝遠程伺服器管理工具

使用 PowerShell 報告 AD 架構變更

使用 Get-ADObject cmdlet,我們可以顯示架構變更。但首先,我們需要向 Get-ADObject 提供一個搜尋基礎,或者說,一個目錄的搜尋區域。我們想要搜尋架構,因此我們需要知道目錄的架構命名內容。幸運的是,使用 Get-ADRootDSE cmdlet 很容易獲取。如果你運行 Get-ADRootDSE 而不帶任何參數,你將在輸出中看到目錄的 schemaNamingContext 路徑。

廣告

Image # Expand
How to Report Active Directory Schema Changes Using PowerShell (Image Credit: Russell Smith)

 

PowerShell 使得提取任何屬性,如 schemaNamingContext,變得容易,方法是使用點和括號,如下所示:

((Get-ADRootDSE).schemanamingcontext)

我們可以使用上面的代碼作為 Get-ADObject cmdlet 的 -SearchBase 參數的值。但是還有其他幾個參數我們需要添加。-SearchScope 應該設置為 OneLevel,這將搜尋 -SearchBase 參數提供的路徑的直接子對象。使用通配符 * 作為 -Filter 參數的值來返回所有內容。

最後,我們使用 -Properties 參數來指定我們希望作為輸出一部分返回的屬性。如你所見,我將提取 objectClass, name, whenChanged,whenCreated 屬性。

廣告

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemanamingcontext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated

我們希望將按日期返回的數據進行分組。為此,我們需要whencreated日期,不包含時間信息。我們可以使用Select-Object cmdlet和計算的屬性來創建一個具有我們需要的數據的新對象,並以正確的格式顯示。在下面展開的命令中,您可以看到我已經將由Get-ADObject生成的對象管道到了Select-Object cmdlet。@表示一個計算的屬性,它具有一個標籤,“Event”,以及一個只返回短格式中whenCreated屬性的日期的表達式。

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}}

接下來,我們將將由Select-Object創建的對象管道到Sort-Object。並讓它通過whenCreated屬性對對象數據進行排序。

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated

最後,讓我們將對象管道到Format-Table cmdlet。它將以表格形式顯示屬性,這些屬性是使用Select-Object cmdlet創建的,並按事件進行分組。

$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize
Image # Expand
How to Report Active Directory Schema Changes Using PowerShell (Image Credit: Russell Smith)
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated

$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize

如果我們一起運行所有代碼,就會在命令提示窗口中列出模式更改。在我的目錄中,安裝了Exchange Server,因此我們可以看到對模式的許多更改。

 

Source:
https://petri.com/how-to-report-active-directory-schema-changes-using-powershell/