Active Directoryで新しい組織単位(OU)を毎回手動で作成するのは、本当に面倒な作業です。特に、支社を設立したり、複数の地域に新しい組織構造を展開したりする場合にはなおさらです。権限を忘れたり、ネストされたコンテナを見落としたり、ADUC(Active Directoryユーザーとコンピューター)の操作に膨大な時間を費やしたりしてしまうことも少なくありません。
そこで、これを素早く処理する方法がPowerShellです。少し奇妙に感じるかもしれませんが、スクリプトを使えば数時間も節約でき、使いこなせればはるかに一貫性も高まります。OU階層全体を素早く構築し、セキュリティグループを作成し、権限を委任する作業も即座に行えます。さらに、これらのOUを対象とするGPOの設定など、その他必要な作業もすべて追加できます。だからこそ自動化する価値があるのではないでしょうか?
Active Directory で OU 構造と権限の作成を自動化する方法
方法1: 基本的なPowerShell OUの作成と管理
適切なPowerShellモジュール、具体的にはActive Directoryモジュールから始めましょう。これは通常、RSATツール(リモートサーバー管理ツール)から提供されます。まだインポートしていない場合は、以下の手順を実行してください。
Import-Module ActiveDirectory
それでも解決しない場合は、Windows 10/11またはServerで、オプション機能からRSATがインストールされていることを確認してください。インストールが完了したら、以下のコマンドでOUを作成できます。
New-ADOrganizationalUnit -Name "Berlin" -Path "OU=DE, DC=woshub, DC=com" -Description "Berlin branch"
ここで-Pathが重要です。親OUまたはルートドメインを入力してください。これを省略すると、最上位にOUが作成されますが、これは望ましくない結果になる可能性があります。設定によってはデフォルトで問題ありませんが、正確なパスが必要な場合もあります。
プロのヒント: ADUC を参照するか、 Get-ADOrganizationalUnitを使用すると、現在のパスを見つけることができます。
方法2:属性を微調整して誤って削除されないように保護する
デフォルトでは、AD はProtectedFromAccidentalDeletionを に設定します$true。これは、スクリプトでデータを削除する場合を除き、問題ないように見えます。これを無効にするには、Set-ADOrganizationalUnit次のようにパイプで指定します。
Get-ADOrganizationalUnit -Identity "OU=Users, OU=Berlin, OU=DE, DC=woshub, DC=com" | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $false
こうすることで、後でテストOUを削除できないという問題を回避することができます。一部のマシンでは、このコマンドを管理者権限で実行する必要があります。そうしないと、すぐには機能しないように見える場合があります。通常は、コンソールを再起動するか、画面を更新することで問題が解決します。
方法3: OUとそのオブジェクトを削除する
OUをクリーンアップまたはリセットする必要がある場合は、Remove-ADObjectが便利ですが、-Recursiveを使用するとOU内のすべての内容が削除されるので注意してください。例:
Remove-ADObject -Identity "OU=Users, OU=Berlin, OU=DE, DC=woshub, DC=com" -Recursive
これは、構造をテストする場合や、失敗した試行のクリーンアップを行う場合に便利です。実行する前に、DN(識別名)を再度確認してください。
方法4: スクリプトを使用して典型的なブランチオフィス構造を構築する
会社に複数の支店があり、それぞれが同じコンテナパターンを持っているとします。グループや委任された権限を含む完全な構造を作成するスクリプトを作成できます。スクリプトの実行内容の簡単な例を以下に示します。
# Define variables $Country="DE" $City="HH" $CityFull="Hamburg" $DomainDN=(Get-ADDomain).DistinguishedName $ParentOU= "OU=$Country, $DomainDN" $OUs = @("Admins", "Computers", "Contacts", "Groups", "Servers", "Service Accounts", "Users") # Create main OU for branch $newOU=New-ADOrganizationalUnit -Name $CityFull -Path $ParentOU -Description "A container for $CityFull users" -PassThru # Loop through sub-OU names and create each inside the main OU foreach ($OU in $OUs) { New-ADOrganizationalUnit -Name $OU -Path $newOU } # Create branch admin groups $adminGroupName = "$City" + "_admins" New-ADGroup -Name $adminGroupName -Path ("OU=Admins, " + $newOU. DistinguishedName) -GroupScope Global -PassThru $accountManagersGroup = "$City" + "_account_managers" New-ADGroup -Name $accountManagersGroup -Path ("OU=Admins, " + $newOU. DistinguishedName) -GroupScope Global -PassThru $wksAdminsGroup = "$City" + "_wks_admins" New-ADGroup -Name $wksAdminsGroup -Path ("OU=Admins, " + $newOU. DistinguishedName) -GroupScope Global -PassThru # Grant permissions to specific groups on the Users OU to delegate password reset rights, for example # Note: You’ll probably need to tweak rights based on your needs and use Set-ACL for finer control
GPOの割り当てや、他のOUへの特定の権限の委任など、拡張できる機能はたくさんあります。PowerShellを使えば、基本を理解すればかなり簡単に使えます。GitHubにリンクされているスクリプトは、多くのコメントが付いているので、良い出発点となるでしょう。
ちょっとした注意点ですが、スクリプトを実行する前に(例えば run Set-ExecutionPolicy RemoteSigned)、実行ポリシーを再確認するか、ドメイン管理者として実行していることを確認してください。そうしないと、PowerShell がスクリプトの実行を拒否したり、エラーを返したりする可能性があります。
まとめ
PowerShellでAD関連の操作を実行するのは、最初は難しそうに感じるかもしれませんが、慣れてしまえば劇的な変化です。OUの作成、グループの設定、権限の委任を一度に自動化できるのは、最初の少しの手間をかけるだけの価値があります。複数のブランチを管理している場合や、クリック操作にうんざりしている場合は、これらのスクリプトを習得することで、長期的には大幅な時間の節約になります。
まとめ
- New-ADOrganizationalUnitを使用してOU を一括作成します。
- 必要に応じて、 Set-ADOrganizationalUnitを使用して属性を変更します。
- Remove-ADObjectを使用すると OU を簡単に削除できます。
- PowerShell スクリプトを使用して、ネストされた構造とアクセス許可を自動化します。
- 各ブランチに GPO またはその他のカスタム タスクを追加して拡張します。