使用 PowerShell 創建 Active Directory OU 報告

使用PowerShell创建Active Directory OU报告。组织单位(OU)是一个Active Directory(AD)容器,用户、组、计算机和其他OU可以存储在其中。每个AD域都可以有其组织单位层次结构。本文将涵盖OU管理以及如何使用Windows PowerShell脚本在AD中移动、创建、删除和生成OU报告,以及将组策略链接并应用到一个OU。

另请阅读 如何安装Active Directory PowerShell模块和导入

使用Powershell创建Active Directory OU报告

先决条件如果我们想要按照本文中的示例脚本操作,我们需要安装必需的组件。

若要按照本文中的示例腳本進行操作,我們需要安裝必要的組件:

那麼,如何使用PowerShell創建Active Directory OU報告呢?讓我們來看看。

了解組織單位命令

A Microsoft Active Directory domain container that can hold users, groups, and computers is an organizational unit (OU). It is the smallest unit to which a Windows system administrator can assign a Group Policy setting or account permission. An organizational unit may contain multiple OUs, but each attribute within the containing OU must be distinct.

對象無法包含來自其他域的Active Directory組織單位內。以下部分將介紹管理OU的基本命令。

使用PowerShell在Active Directory中創建OU

我們可以透過使用New-ADOrganizationalUnit指令在AD中建立一個新的組織單位,並指定一個新的OU對象名稱。Windows PowerShell將默認在域根目錄中創建組織單位。例如,以下命令將在域控制器(DC)上創建一個名為IT的OU:

New-ADOrganizationalUnit “IT

如果我們需要一個不同的OU LDAP路徑,可以使用-Pathcmdlet參數來指定其區分名稱(DN):

New-ADOrganizationalUnit “IT” –Path “OU=Users,DC=InfraSOS,DC=com”

使用PowerShell在Active Directory中移動OU

如果我們需要將一個OU移動到另一個位置,請使用Move-ADObject命令。需要注意的是,我們必須不要保護目標OU免受意外刪除。如果是這樣,請使用以下命令來移除保護:

Set-ADOrganizationalUnit -Identity "OU=IT,OU=Users,DC=InfraSOS,DC=Com" -ProtectedFromAccidentalDeletion $False

現在我們可以將OU移動到另一個位置:

Move-ADObject -Identity "OU=Regions,OU=Managers,DC=InfraSOS,DC=Com" -TargetPath "OU=IT,DC=InfraSOS,DC=Com"

使用PowerShell在Active Directory中重命名OU

使用Rename-ADObject命令來重命名組織單位。Identity參數指定要重命名的AD對象,並需要DN或GUID。例如,此命令將IT OU的名稱更改為Marketing:

Rename-ADObject -Identity "OU=Regions,OU=IT,DC=InfraSOS,DC=COM" -NewName Marketing

我們還可以使用 Get-ADOrganizationalUnit cmdlet,並搭配-Filter 參數,這樣就不需要完整的LDAP路徑到OU。然而,該cmdlet將搜索整個AD,並且腳本將對所有在其名稱中包含搜索詞的組織單元應用命令的操作:

Get-ADOrganizationalUnit -Filter "Name -eq 'Zones'" | Rename-ADObject -NewName Area

一旦我們開始生成報告,我們將討論更多關於獲取OU命令的內容。

使用PowerShell在Active Directory中對OU應用組策略

要將群組原則指派給組織單位,我們可以使用New-GPLink命令,該命令將指定的群組原則物件(GPO)與組織單位連結。此外,我們可以識別連結的以下任何屬性:

  • 啟用 – 如果連結具有啟用狀態,則在處理站點、網域和OU的群組原則時會應用GPO的處理設定。
  • 強制 – 如果連結具有強制狀態,我們無法在較低層級的容器中阻止OU。
  • 順序順序狀態指定GPO設定的優先級。

例如,以下命令將Block GPO連結到IT組織單位,並且該連結既啟用又強制執行:

New-GPLink -Name "Block" -Target "OU=Districts,OU=IT, DC=InfraSOS, DC=com" -LinkEnabled Yes -Enforced Yes

使用PowerShell在AD中將用戶和計算機移至新的OU

在我們創建了一個組織單位並選擇性地將其連結到一個 GPO之後,我們將在其中填充用戶和計算機。 Move-ADObject PowerShell中的cmdlet將任何對象或一組活動目錄對象移動到不同的OU。Identity參數指示應該重新定位哪個對象Active Directory對象或容器。

值得注意的是,我們必須輸入對象的完整LDAP路徑或SID;我們不能使用其SamAccountName。以下示例展示了如何將用戶移動到IT OU:

Move-ADObject -Identity "CN=marion,CN=Users,DC=InfraSOS,DC=com" -TargetPath "OU=IT,OU=Users,DC=InfraSOS,DC=com"

使用相同的語法來移動計算機對象。例如,以下命令將計算機DESKTOP-01轉移到計算機容器:

Move-ADObject -Identity "CN=DESKTOP-01,OU=Computers,DC=InfraSOS,DC=com" -TargetPath "CN=Workstations,DC=InfraSOS,DC=com"

批量移動AD計算機和用戶到另一個OU

如果我們有一個預定義的對象列表要移動,我們可以將其保存為文本文件,然後導入到Active Directory中。通過添加一個AD對象每行來準備您的列表。包含列表的文本文件應該看起來像這樣:

使用以下PowerShell腳本來移動文本文件中列出的AD用戶帳戶:

$destOU =  "OU=Users,OU=IT,DC=InfraSOS,DC=com"
$usersList = Get-Content -Path "C:\temp\users.txt"

$usersList  | ForEach-Object {
     $userName  = (Get-ADUser -Identity $_.Name).distinguishedName
     Move-ADObject  -Identity $userName  -TargetPath $destOU
 }

要移動文本文件中列出的AD計算機帳戶,請使用以下PowerShell腳本:

$computers = Get-Content -Path "C:\Temp\Computers.txt"

$destOU =  "OU=Computers,OU=IT,DC=InfraSOS,DC=com"
ForEach( $computer in $computers){
    Get-ADComputer $computer |
    Move-ADObject -TargetPath $destOU
}

使用PowerShell從Active Directory中移除一個組織單位(OU)的命令是

The Remove-ADOrganizationalUnit cmdlet。但是,我們必須先取消保護OU以防止意外刪除。使用Get-ADOrganizationalUnit 和 Set-ADOrganizationalUnit cmdlets,我們可以移除名稱中包含Zones的所有OU的意外刪除選項:

Get-ADOrganizationalUnit -filter "Name -eq 'Zones'" | Set-ADOrganizationalUnit  -ProtectedFromAccidentalDeletion $False

以下命令用於從AD中移除名稱包含Zones的所有OU:

Get-ADOrganizationalUnit -filter "Name -eq 'Zones'" | Remove-ADOrganizationalUnit –Recursive

系統將提示我們確認刪除:

注意,-Recursive 參數將移除OU及其所有子對象。即使子對象設置了防止刪除的保護,AD也會刪除這些子對象。

在AD中管理組織單位

現在我們已經討論了涉及組織單位的基本命令和參數,我們將進一步討論如何使用PowerShell生成OU報告

使用PowerShell獲取所有OU的列表

我們將使用 Get-ADOrganizationalUnit cmdlet。首先,按CanonicalName排序。這個命令顯示了一個更容易閱讀的OU結構。

Get-ADOrganizationalUnit -Properties CanonicalName -Filter * |
Sort-Object CanonicalName |
Format-Table CanonicalName, DistinguishedName

以下是當我們在PowerShell中運行命令時的示例輸出

輸出包含AD中的所有OU是一個很好的列表。但是,我們如何知道OU是否包含任何用戶

取得所有OU列表,包括用戶數量,使用PowerShell

我們喜歡使用PowerShell來獲取OU列表,包括用戶數量。這個命令將告訴我們OU中是否有任何用戶。

Get-ADOrganizationalUnit -Properties CanonicalName -Filter * |
Sort-Object CanonicalName |
ForEach-Object {
    [pscustomobject]@{
        Name          = Split-Path $_.CanonicalName -Leaf
        CanonicalName = $_.CanonicalName
        UserCount     = @(Get-AdUser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
    }
}

它將顯示具有UserCount列屬性的輸出。如果UserCount屬性值為,則該OU沒有用戶。如果OU包含計算機對象,則它不會出現。此命令只會檢查並顯示用戶數量。

使用PowerShell將AD中的OU導出到CSV文件

現在我們已經看到了OU列表,我們想要導出AD中的OU列表。因此,腳本將使用PowerShell來獲取組織單位並將它們導出到文本文件。

$results = Get-ADOrganizationalUnit -Properties CanonicalName -Filter * | Sort-Object CanonicalName |
ForEach-Object {
    [pscustomobject]@{
        Name          = Split-Path $_.CanonicalName -Leaf
        CanonicalName = $_.CanonicalName
        UserCount     = @(Get-AdUser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
    }
}
$results | Out-File C:\export_OUs.txt -Encoding UTF8

如果我們想要導出到CSV文件,請將最後一行更改為以下命令:

$results | Export-Csv -Path C:\export_OUs.csv -NoTypeInformation -Encoding UTF8

運行上述命令後,在指定的位置找到導出的文件。

感謝您閱讀使用 PowerShell 創建活動目錄 OU 報告。我們將在此結束。

使用 PowerShell 創建活動目錄 OU 報告 結語

現在我們已經學會如何使用 PowerShell 腳本管理 活動目錄 中的 OU,我們可以自動執行與 OU 管理 相關的各種操作並生成相應的 報告。請確保在嘗試這些命令之前,啟用活動目錄回收站功能以輕鬆回滾任何錯誤刪除。細心跟踪組織單元的所有更改也是明智之舉。

請查看我們部落格中的 PowerShell 內容 這裡。

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