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

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

たとえば、パスワードポリシーの変更はユーザーがログオンする際に入力するパスワードが対象だから、設定変更は直ちに適用されて有効になる。また、ドメインコントローラも即時適用の対象になる。ところが、クライアントPCにおける[コンピュータの構成]の変更など、即座に適用されないものもある。

これは、台数が多いクライアントPCですべてのポリシー項目を即時適用にすると、サーバとネットワークの負荷が増大するためと考えられる。既定の設定では90分置きにポリシー項目の更新をチェックして、変更があれば適用するようになっている。

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

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

コマンドによる強制適用
コマンド操作によって、強制的に最新状態のグループポリシーを適用できる。使用するコマンドが、Windows 2000とWindows XP/Windows Server 2003以降で異なる点に注意が必要だ。また、[コンピュータの構成]と[ユーザーの構成]のどちらを適用するかでも、使用するコマンドの内容に違いがある。

Windows 2000の場合、以下のコマンドを使用する。上は[コンピュータの構成]を適用するもの、下は[ユーザーの構成]を適用するものだ。

secedit /refreshpolicy machine_policy
secedit /refreshpolicy user_policy

Windows XP/Vista/7、Windows Server 2003/2008では、以下のコマンドを使用する。上は[コンピュータの構成]を適用するもの、下は[ユーザーの構成]を適用するものだ。

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のスキーマバージョンを無視して処理を強行するものだ。この指定を省略すると、Windows Server 2003のスキーマバージョンとみなして処理する。