厳選ブログ転載

業務アプリケーションのレジストリ設定をグループ・ポリシーで配布する
―― ADMXファイルを作成しないグループ・ポリシー設定術 ――

日本マイクロソフト エバンジェリスト
安納 順一 (http://blogs.technet.com/b/junichia/
2012/03/28

「厳選ブログ転載」シリーズでは、インターネット上の膨大なブログ・コンテンツの中から、特にWindows Server Insiderの読者に有用だと考えられるブログ記事を編集部が厳選し、そのブログ記事を執筆したブロガーの許可の下、その全文を転載・翻訳しています。この活動により、Windowsシステム/ネットワーク・エンジニアのブログ文化の価値と質を高め、より一層の盛り上げに貢献することを目指しています。

本稿は、2009年6月に公開された次のブログ記事「【Managemnt】WS2008 R2:ADMXファイルを作らずに業務アプリのレジストリ設定をグループポリシー化する」「――その2」に簡単な校正・加筆を行ったうえで転載したものです。

 例えばこんなシチュエーションを考えます。

  • クライアントPCに業務アプリケーションがインストールされている
  • 業務アプリケーションの環境設定はレジストリで持っている
  • 業務アプリケーションの環境変更は、レジストリを直接変更することで行っている
  • 業務アプリケーションの利用者が間違えて環境を変えてしまう(レジストリが変わってしまう)ことがある
  • 本当は、ADMXファイルを作って、業務アプリケーションの環境設定をグループ・ポリシーに組み込みたい
  • そうすれば定期的に設定値がリフレッシュされることは分かっている
  • が、ADMXファイルを作るのは面倒……orz

 さぁ、こんなときにどうしましょう?と。

  上にも書いた通り、グループ・ポリシーのよいところは「定期更新」機能があるところです。デフォルトでは90分に1回、バックエンドで再適用してくれるため、ユーザーが設定を変えてしまっても一定時間経過すれば、管理者が意図した設定値に戻してくれます。更新間隔は変更できます*1から、極端ですが1分に1回再適用なんてことも可能です。

*1 更新間隔の変更は以下のノードで設定できます。
  • コンピュータ単位で適用する場合:
    [コンピュータの構成]−[ポリシー]−[管理用テンプレート]−[システム]−[グループ ポリシー]−[コンピュータのグループ ポリシーの更新間隔]
  • ユーザー単位で適用する場合:
    [ユーザーの構成]−[ポリシー]−[管理用テンプレート]−[システム]−[グループ ポリシー]−[ユーザーのグループ ポリシーの更新間隔]

 その恩恵にあずかるには、業務アプリケーション用のADMXファイルを作成しなければなりません。

 でも、書式を勉強しなければならないため、ちょいと面倒です。

 そこで、Windows Server 2008 R2のGPMC(グループ・ポリシー管理コンソール)で提供されているグループ・ポリシー用のPowerShellコマンドレットを使用します。

 その名も「Set-GPRegistryValue」です。

 これを使うには手順を踏まなければならないので、以下にStep-By-Stepで書きます。

0.グループ・ポリシー管理機能が組み込まれていることを確認する

 管理ツールに「グループ ポリシーの管理」があることを確認してください。これがない場合は、サーバ・マネージャで[グループ ポリシーの管理]という機能を追加する必要があります。

1.Windows Server 2008 R2でPowerShellプロンプトを開く

 グループ・ポリシーを操作するので管理者モードで開いてください。

2.Group Policy用のコマンドレットをインポートする

 デフォルトのままではSet-GPRegistryValueコマンドレットは使用できません。まずは、グループ・ポリシー関連のコマンドレットをインポートする必要があります。以下のコマンドレットを、プロンプトから入力してください。

PS C:\> Import-Module GroupPolicy -verbose

PowerShellでグループ・ポリシー用コマンドレットを利用できるようにする
「Import-Module」というコマンドレットを使って、グループ・ポリシー用のコマンドレットをインポートする。

 上の画面のように、インポートされたコマンドレットの一覧が表示されればOKです。念のために、「Get-Command *-GP*」というコマンドレットでグループ・ポリシー関連のコマンドレットが参照できるかどうか確認してみましょう。以下のように、全部で25個のコマンドレットが表示されるはずです。

PS C:\> Get-Command *-GP*

CommandType Name                       Definition
----------- ----                       ----------
Cmdlet      Backup-GPO                 Backup-GPO -Guid <Guid> -P...
Cmdlet      Copy-GPO                   Copy-GPO -SourceGuid <Guid...
Cmdlet      Get-GPInheritance          Get-GPInheritance [-Target...
Cmdlet      Get-GPO                    Get-GPO [-Guid] <Guid> [[-...
Cmdlet      Get-GPOReport              Get-GPOReport [-Guid] <Gui...
Cmdlet      Get-GPPermissions          Get-GPPermissions -Guid <G...
Cmdlet      Get-GPPrefRegistryValue    Get-GPPrefRegistryValue -G...
Cmdlet      Get-GPRegistryValue        Get-GPRegistryValue -Guid ...
Cmdlet      Get-GPResultantSetOfPolicy Get-GPResultantSetOfPolicy...
Cmdlet      Get-GPStarterGPO           Get-GPStarterGPO -Guid <Gu...
Cmdlet      Import-GPO                 Import-GPO -BackupId <Guid...
Cmdlet      New-GPLink                 New-GPLink -Guid <Guid> -T...
Cmdlet      New-GPO                    New-GPO [-Name] <String> [...
Cmdlet      New-GPStarterGPO           New-GPStarterGPO [-Name] <...
Cmdlet      Remove-GPLink              Remove-GPLink -Guid <Guid>...
Cmdlet      Remove-GPO                 Remove-GPO -Guid <Guid> [-...
Cmdlet      Remove-GPPrefRegistryValue Remove-GPPrefRegistryValue...
Cmdlet      Remove-GPRegistryValue     Remove-GPRegistryValue [-G...
Cmdlet      Rename-GPO                 Rename-GPO -Guid <Guid> -T...
Cmdlet      Restore-GPO                Restore-GPO -BackupId <Gui...
Cmdlet      Set-GPInheritance          Set-GPInheritance [-Target...
Cmdlet      Set-GPLink                 Set-GPLink -Guid <Guid> -T...
Cmdlet      Set-GPPermissions          Set-GPPermissions -Guid <G...
Cmdlet      Set-GPPrefRegistryValue    Set-GPPrefRegistryValue -G...
Cmdlet      Set-GPRegistryValue        Set-GPRegistryValue -Guid ...


PS C:\>
TIPS「RSATツールでWindows Server 2008をリモート管理する

 これらのコマンドレットは、グループ・ポリシー管理機能がインストールされたWindows Server 2008 R2だけでなく、RSAT(の中の「グループ ポリシー管理ツール」)がインストールされたWindows 7でも使用できます。RSATについては関連記事を参照してください。

運用 Windows PowerShellコマンド&スクリプティング入門(後編)「4.PowerShellの関数

 ちなみに、「Import-Module」コマンドレットでロードしたモジュールは、現在のPowerShellセッションのみで有効となるため、毎回Import-Moduleを行う必要があります。毎回自動的にImport-Moduleを実行するには、プロファイルに書き込んでおく必要があります(この手順については関連記事にあるコラム「プロファイルの活用」を参照してください)。

3.Set-GPRegistryValueを使用してレジストリの値を設定する

 これでSet-GPRegistryValueコマンドレットが使えるようになりました。

 ではさっそく、業務に必要なレジストリ設定を行ってみます。仮に、以下のレジストリ設定が必要であると想定します。

項目 内容
キー HKEY_CURRENT_USER\Software\MyApp
値の名前 InstallPath
値の型 REG_SZ
値の内容 C:\Program Files\MyApp
本稿で想定している業務に必要なレジストリ設定

 これをグループ・ポリシーの一部として組み込むには、以下のコマンドレットをPowerShellのプロンプトから入力します。

PS C:\> Set-GPRegistryValue -Name "TestPolicy" -Key "HKEY_CURRENT_USER\Software\MyApp" -ValueName "InstallPath" -Value "C:\Program Files\MyApp" -Type String

DisplayName      : TestPolicy
DomainName       : demodomain.com
Owner            : DEMODOMAIN\Domain Admins
Id               : 1eeb4b61-df4f-48eb-8e71-eb15d79bd855
GpoStatus        : AllSettingsEnabled
Description      :
CreationTime     : 2009/06/01 11:48:21
ModificationTime : 2009/06/01 12:09:10
UserVersion      : AD Version: 3, SysVol Version: 3
ComputerVersion  : AD Version: 2, SysVol Version: 2
WmiFilter        :

PS C:\>

 「TestPolicy」は、すでに存在するGPOの名前です。レジストリの設定をポリシーの一部として組み込むわけですから、どのポリシーに組み込むかを指定する必要があります。

 「-Type String」は値のタイプです。今回はReg_SZを意味する「String」を指定しました。このほかに、「ExpandString」「Binary」「DWord」「MultiString」「QWord」を指定できます。詳しくは、「Get-Help Set-GPRegistryValue」というコマンドレットでヘルプを参照してください。

 以上で設定は完了です。複数のレジストリ値が存在する場合には同じ処理を繰り返せばよいわけです。

 この操作によって、SYSVOL配下のPoliciesフォルダに格納されているGPOに、上記の設定が書き込まれます。

SYSVOLに保存されたレジストリ設定

 しばらくすると、上で設定した値が実際にクライアント側のレジストリに反映されます。強制的に反映したい場合には、従来通り、コマンドプロンプト(PSプロンプトでも可)から「gpupdate /force」コマンドを実行しましょう。

グループ・ポリシーによって配布・適用されたレジストリ設定

 レジストリ・エディタ上からこのエントリを消したり変更したりしても、バックグラウンド更新機能によって強制的に値が書き戻されます。

4.設定されている値を確認する

 設定されている値を確認するには、「Get-GPRegistryValue」というコマンドレットを使用します。

PS C:\> Get-GPRegistryValue -Name "TestPolicy" -Key "HKEY_CURRENT_USER\Software\MyApp"

KeyPath     : Software\MyApp
FullKeyPath : HKEY_CURRENT_USER\Software\MyApp
Hive        : CurrentUser
PolicyState : Set
Value       : C:\Program Files\MyApp
ValueName   : InstallPath
HasValue    : True

PS C:\>

レジストリ設定を無効化するには

 「無効化」とは、ポリシー・エディタで設定するところの「未構成」と同等です。つまり、ポリシーの設定自体は残しつつ、クライアントやユーザーには「適用しない状態を維持する」という意味になります。

 結果として、無効化された値はレジストリから消されるため、アプリケーションはデフォルト値で動作することになります。後述の「削除」とは動作が異なるので注意してください。

 ポリシー化した設定値を無効にするには、以下のように「-Disable」を指定するだけです。

PS C:\> Set-GPRegistryValue -Name "TestPolicy" -Key "HKCU\Software\MyApp" -ValueName "InstallPath" -Disable

DisplayName      : TestPolicy
DomainName       : demodomain.com
Owner            : DEMODOMAIN\Domain Admins
Id               : 1eeb4b61-df4f-48eb-8e71-eb15d79bd855
GpoStatus        : AllSettingsEnabled
Description      :
CreationTime     : 2009/06/01 11:48:21
ModificationTime : 2009/06/01 19:14:22
UserVersion      : AD Version: 10, SysVol Version: 10
ComputerVersion  : AD Version: 2, SysVol Version: 2
WmiFilter        :

PS C:\>

 上記の例では特定のエントリ(InstallPath)が対象となっていますが、以下のように「-ValueName」を指定しなければ、MyAppキー配下の全エントリを一度に無効にできます。

PS C:\> Set-GPRegistryValue -Name "TestPolicy" -Key "HKCU\Software\MyApp" -Disable

DisplayName      : TestPolicy
DomainName       : demodomain.com
Owner            : DEMODOMAIN\Domain Admins
Id               : 1eeb4b61-df4f-48eb-8e71-eb15d79bd855
GpoStatus        : AllSettingsEnabled
Description      :
CreationTime     : 2009/06/01 11:48:21
ModificationTime : 2009/06/01 19:18:36
UserVersion      : AD Version: 11, SysVol Version: 11
ComputerVersion  : AD Version: 2, SysVol Version: 2
WmiFilter        :

PS C:\>

 「-Disable」で無効化した後で同じパスにレジストリ・エントリを書き込んでも、次回のバックグラウンド更新時にエントリが削除されてしまうことに注意してください。

レジストリ設定を削除するには

 ポリシー自体を削除するには、「Remove-GPRegistryValue」というコマンドレットを使用します。これを使うと、きれいさっぱりGPOから削除されます。GPOから削除されたタイミングで、実際のレジストリ・パスからも削除されます。

 Remove-GPRegistryValueコマンドレットの実行後に、手動で同じパスにエントリを追加しても、無効化したときのようにポリシーのバックグラウンド更新によって削除されることはありません。

 以下は、特定のエントリ(InstallPath)のみを削除しています。よって、MyApp配下の他のエントリは削除されずに残ります。

PS C:\> Remove-GPRegistryValue -Name "TestPolicy" -Key "HKCU\Software\MyApp" -ValueName "InstallPath"

DisplayName      : TestPolicy
DomainName       : demodomain.com
Owner            : DEMODOMAIN\Domain Admins
Id               : 1eeb4b61-df4f-48eb-8e71-eb15d79bd855
GpoStatus        : AllSettingsEnabled
Description      :
CreationTime     : 2009/06/01 11:48:21
ModificationTime : 2009/06/01 19:44:56
UserVersion      : AD Version: 16, SysVol Version: 16
ComputerVersion  : AD Version: 2, SysVol Version: 2
WmiFilter        :

PS C:\>

 MyAppキーごと削除する場合には、「-ValueName」を指定しないようにします。End of Article

PS C:\> Remove-GPRegistryValue -Name "TestPolicy" -Key "HKCU\Software\MyApp"

DisplayName      : TestPolicy
DomainName       : demodomain.com
Owner            : DEMODOMAIN\Domain Admins
Id               : 1eeb4b61-df4f-48eb-8e71-eb15d79bd855
GpoStatus        : AllSettingsEnabled
Description      :
CreationTime     : 2009/06/01 11:48:21
ModificationTime : 2009/06/01 20:14:30
UserVersion      : AD Version: 21, SysVol Version: 21
ComputerVersion  : AD Version: 2, SysVol Version: 2
WmiFilter        :

PS C:\>

 「厳選ブログ転載」

@IT Special

- PR -

TechTargetジャパン

Windows Server Insider フォーラム 新着記事
  • 第538話 がんばれエーアイくん5 (2017/2/21)
     エーアイくんの画像認識装置は、見た目で物体の体積や重さも判別可能。切手の額面も料理の温め時間もバッチリ。他にも……
  • 第537話 おすすめ商品 (2017/2/14)
     ショッピングサイトのおすすめ商品、最近は気になるものばっかり出るのよね〜。なんだか気味が悪いわ……
  • Thunderbirdで証明書がエラーになる場合の対策方法 (2017/2/9)
     Thunderbirdは、独立して証明書を保存・格納している。そのため、証明書に起因するエラーが発生することがある。正しく証明書を扱えるようにする方法を紹介する
  • AzureのWeb AppでPHPのエラーログを記録・保存する (2017/2/8)
     AzureのWeb AppでPHPのエラーログを記録・保存する方法を紹介する。PHPで何らかのエラーや警告が生じると、php_errors.logファイルに記録されるようになる
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間
ソリューションFLASH