グループポリシーの仕様では、グループポリシーオブジェクト(GPO)の設定を変更したときに、それを適用するタイミングが対象によって異なる点に注意する必要がある。今週は、この件と回避策としての即時適用、それと初期状態のGPOを復元する方法について解説しよう。

グループポリシーの変更を直ちに適用する

たとえば、パスワードポリシーの変更はユーザーがログオンする際に入力するパスワードが対象だから、設定変更は直ちに適用するので即時有効である。また、ドメインコントローラも即時適用の対象になる。

ところが、クライアントPCにおける[コンピュータの構成]の変更など、即時適用にならないものもある。これは、台数が多いクライアントPCですべてのポリシー項目を即時適用すると、サーバとネットワークの負荷が増大するためと考えられる。既定の設定では90分ごとにポリシー項目の更新をチェックして、変更が照れば適用するようになっている。

しかし、グループポリシーの設定についてテスト、あるいは検証したい場面では、クライアントPCでも即座に変更結果を反映してくれる方が都合がよい。ポリシーエディタで設定を変更した後で、直ちに変更結果を反映する方法は、2種類ある。さらにコマンドを使用する方法はOSによって異なる。

再起動による強制適用
変更結果を反映させたいコンピュータを再起動する。コンピュータが起動してログオン画面を表示する前のタイミングで、ドメインコントローラから最新のポリシー情報を読み出して適用する。

コマンドによる強制適用
コマンド操作によって、強制的に最新状態のグループポリシーを適用できる。[コンピュータの構成]と[ユーザーの構成]のどちらを適用するかで、使用するコマンドの内容に違いがある。

Windows XPならびにWindows Server 2003以降は、GPUPDATEコマンドを使用する(「Group Policy UPDATE」と覚える)。上は[コンピュータの構成]を適用する際に使用するもの、下は[ユーザーの構成]を適用する際に使用するものだ。

GPUPDATE /Target:Computer
GPUPDATE /Target:User

GPUPDATEコマンドには、「/Force」という引数もある。これは、変更の有無にかかわらず、すべてのポリシー項目を適用し直すものだ。これを省略したときには、変更が加わったポリシー項目だけを適用する。

また、適用後に再起動する「/Boot」や、適用後にログオフする「/Logoff」といった引数もある。これは、システムの起動時、あるいはユーザーのログオン時にしか適用されないポリシー項目を変更したときに利用する。

なお、ポリシー情報の更新を調べて適用する時隔は、[管理用テンプレート]-[システム]-[グループポリシー]で変更できる。しかし、間隔を縮めすぎるとサーバやネットワークの負荷が増えるため、できれば避けたい方法だ。

既定のGPOを初期状態に戻す

Active Directoryを構成した時点で、ドメインについては「Default Domain Policy」、ドメイン以下のOU「Domain Controllers」には「Default Domain Controllers Policy」というGPOを作成・リンクしている。

これらのGPOの設定内容は、GPOを新規作成したときの既定の内容とは異なっている。そのため、ドメイン、あるいは「Domain Controllers」OUを対象とするグループポリシー設定を行うときには、これらのGPOはいじらずに、新たにGPOを作成・リンクして、そちらを編集する方が好ましい。

しかし、すでにこれら既定のGPOを変更してしまっていて、その状態でトラブルに見舞われた場合には、既定のGPOを初期状態に戻す手だてが必要だろう。それがDCGPOFIXコマンドだ(「Domain Controllers GPO FIX」と覚える)。DCGPOFIXコマンドの実行例を以下に示す。

・[Default Domain Policy]と[Default Domain Controllers Policy]の両方を初期化する :DCGPOFIX /target:both

・[Default Domain Policy]だけを初期化する :DCGPOFIX /target:domain

・[Default Domain Controllers Policy]だけを初期化する :DCGPOFIX /target:dc

このコマンドは初期状態に戻す機能しかなく、特定の時点における状態に戻すことはできない。そのため、設定保全のことを考えると、先にバックアップを作成してからDCGPOFIXコマンドを実行するべきだろう。

なお、このコマンドには引数「/ignoreschema」もある。これは、対象になっているActive Directoryのスキーマバージョンを無視して処理を強行するものだ。