今週は、異なるドメインの間でGPOを行き来させる方法について解説しよう。

基本的には、ひとつの組織の中で複数のActive Directoryドメインを構成する方法は推奨されておらず、できるだけ単一のドメインにまとめる方がよいとされている。しかし、何かの事情で複数のドメインを構成している、あるいは子会社や関連会社の分まで管理している、といった事情から、複数のドメインを扱わなければならない場合も考えられる。

そして、その複数のドメインに対してある程度の共通性があるセキュリティ設定を適用しようとすると、グループポリシーを使用して、同じような内容を持つGPOをそれぞれのドメインに適用しなければならない。そこで設定の手間を省くために、GPOのドメイン間移動という話が出てくる。

基本的にはバックアップとインポートの組み合わせ

といっても、実はそれほどややこしい話ではなく、基本的にはGPMC(Group Policy Management Console)が持つバックアップ機能とインポート機能の組み合わせによって実現できる。作業手順の概略は以下のようになるが、バックアップ、あるいはインポートの具体的な操作手順については、本連載の第63回を参照していただきたい。

  1. あるドメインで、GPOを作成・編集する
  2. そのGPOを、GPMCでバックアップする
  3. バックアップ先フォルダの内容を、移行先ドメインのドメインコントローラからアクセスできる場所に持って行く
  4. 移行先ドメインのドメインコントローラにログオンして、GPMCを使ってGPOのインポートを行う

つまり、バックアップやインポートの操作手順は同じで、操作対象が同一ドメイン内から異ドメイン間に変わるだけだ。

ドメイン依存の設定内容に注意

と、これで済めば話は簡単なのだが、そうは問屋が卸してくれない。というのは、ポリシー項目によってはドメイン名、ユーザー名、グループ名など、個々のドメインに依存する設定内容を持っている場合があるからだ。

たとえば、特定のユーザーアカウントやグループを対象にしたポリシー項目があった場合、ドメインが変わるとオブジェクトの名称やSIDも変わってしまう。そのため、そのままではポリシー項目の適用ができない。そこで登場するのが移行テーブルだ。

移行テーブルを作成するには、「%programfiles%\gpmc\scripts」フォルダにあるWSHスクリプト「CreateMigrationTable.wsf」を利用する。

このスクリプトは、実行する際に引数として、移行テーブルのファイル名とGPOの名前を指定するようになっている。構文は以下の通りで、これをコマンドプロンプトで実行する。

cscript "%programfiles%\gpmc\scripts\CreateMigrationTable.wsf" <移行テーブルのファイル名> /gpo:<GPOの名前> /MapByName

以下に示す例は、移行テーブルのファイル名を「MyTable.xml」、移行対象になるGPOの名前を「Sample Policy」としたときのものだ。移行テーブルのファイル名についてはフルパス指定も可能だ。パス指定を省略すると、カレントフォルダに出力する。

cscript "%programfiles%\gpmc\scripts\CreateMigrationTable.wsf" MyTable.xml /gpo:"Sample Policy" /MapByName

いずれも、名前にスペースを含むときには引用符( " " )で囲む必要がある。これらをいちいち手作業で入力するのは大変なので、バッチファイルを作成しておくのも手だ。

こうして出力した移行テーブルをテキストエディタで編集して、ドメイン名などに依存する項目を書き直す。

次に、移行先のドメインでGPMCを使ったインポート操作を行うのだが、その際に、インポート先GPOとインポート元バックアップの間でドメイン名などの情報に違いがあると、移行テーブルを指定するかどうかの選択を求めてくるようになっている。

そこで、続いて表示する画面で[この移行テーブルを使用して宛先GPOにマッピングする]を選択してから、先に編集した移行テーブルのXML文書ファイル名を指定してインポートを行えばよい。

ちなみに、「%programfiles%\gpmc\scripts」フォルダには、これ以外にもいろいろと、グループポリシーに関連するスクリプトがある。