PowerShellを使用してActive Directory OUレポートを作成する

パワーシェルを使用してActive Directory OUレポートを作成する。組織単位(OU)は、Active Directory(AD)コンテナであり、ユーザー、グループ、コンピューター、その他のOUを格納できます。各ADドメインには、独自の組織単位の階層を持つことができます。この記事では、OU 管理と、Windows PowerShellスクリプトを使用してADで移動、作成、削除、OUレポートの生成、およびグループポリシーのリンクと強制を行う方法について説明します。

パワーシェルを使用して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 ディレクトリ 組織単位内に含めることはできません。以下のセクションでは、OUを管理するための基本的なコマンドについて説明します。

PowerShellを使用してActive DirectoryでOUを作成する

新しい組織単位をADで作成するには、New-ADOrganizationalUnitコマンドを使用し、新しいOUオブジェクトの名前を指定します。Windows PowerShellはデフォルトでドメインルートに組織単位を作成します。例えば、以下のコマンドはドメインコントローラ(DC)上にITという名前のOUを作成します。

New-ADOrganizationalUnit “IT

別のOUのLDAPパスが必要な場合は、-Pathコマンドレットパラメータを使用して、その識別名(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パラメータは、DNまたはGUIDのいずれかを必要とするリネームされるべきADオブジェクトを指定します。たとえば、このコマンドはITOUの名前をマーケティングに変更します:

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

また、 Get-ADOrganizationalUnitコマンドレットを使用し、-Filter パラメータを指定することもできます。これにより、OUへの完全なLDAPパスが必要ないだけでなく、スクリプトはコマンドのアクションを検索語句を含むすべての組織単位に適用します。ただし、このコマンドレットは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-ADObjectPowerShellのコマンドレットは、任意のオブジェクトまたはアクティブディレクトリオブジェクトのセットを別のOUに移動します。Identityパラメータは、どのオブジェクトがActive Directoryオブジェクトまたはコンテナに再配置されるかを示します。

オブジェクトの完全なLDAPパスまたはSIDを入力する必要があることに注意してください。SamAccountNameを使用することはできません。次の例は、ユーザーをITOUに移動する方法を示しています。

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にインポートできます。リストを準備し、1行に1つのADオブジェクトを追加してください。リストを含むテキストファイルは、次のようになります。

テキストファイルに記載されたADユーザーアカウントを移動するために、このPowerShellスクリプトを使用してください。

$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 を削除する

次のRemove-ADOrganizationalUnitコマンドレットは、OU を削除します。ただし、OU を誤って削除されることから保護する必要はありません。Get-ADOrganizationalUnitコマンドレットとSet-ADOrganizationalUnitコマンドレットを使用して、その名前に「Zones」という単語が含まれているすべての OU の予期しない削除オプションを削除できます。

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

次のコマンドレットを使用して、名前に「Zones」が含まれているすべての OU を AD から削除します。

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

システムは削除を確認するように求められます。

ただし、-Recursiveパラメータは、OU とそのすべての子オブジェクトを削除します。削除からの保護が有効になっていても、AD は子オブジェクトを削除します。

ADでの組織単位の管理

組織単位に関連する基本的なコマンドとパラメータについて説明したところで、OU レポートを生成する方法についてPowerShellでさらに説明します。

PowerShellですべてのOUのリストを取得する

ここでは、 Get-ADOrganizationalUnit コマンドレットを使用します。まず、CanonicalNameでソートします。このコマンドは、OU構造が読みやすくなります。

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

以下は、コマンドを実行したときのPowerShellでの例出力です。

AD内のすべてのOUの出力は素晴らしいリストです。しかし、OUにユーザーが含まれているかどうかをどのようにして知ることができるでしょうか?

すべてのOUのリスト、ユーザー数を含め、PowerShellを使用して取得する

OUのリストとユーザー数を含め、PowerShellを使用して取得したいと思います。このコマンドは、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にコンピューターオブジェクトが含まれている場合、このコマンドはチェックしてユーザー数を表示しません。

ADのOUをPowerShellで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を使用してActive Directory OUレポートを作成していただき、ありがとうございます。これで終了とさせていただきます。

PowerShellを使用してActive Directory OUレポートを作成する結論

PowerShellスクリプトを使用してOUを管理する方法を学んだので、OU管理に関連するさまざまな操作を自動化し、それに応じたレポートを生成することができます。これらのコマンドを試す前に、誤った削除を簡単に元に戻すためにActive Directory Recycle Bin機能を有効にしてください。また、組織単位へのすべての変更を注意深く追跡することも重要です。

当社のブログでPowerShellコンテンツをご覧ください:こちら。

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