厳選ブログ転載 業務アプリケーションのレジストリ設定をグループ・ポリシーで配布する 安納 順一 (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* |
|
これらのコマンドレットは、グループ・ポリシー管理機能がインストールされたWindows Server 2008 R2だけでなく、RSAT(の中の「グループ ポリシー管理ツール」)がインストールされたWindows 7でも使用できます。RSATについては関連記事を参照してください。
|
ちなみに、「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 |
「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" |
レジストリ設定を無効化するには
「無効化」とは、ポリシー・エディタで設定するところの「未構成」と同等です。つまり、ポリシーの設定自体は残しつつ、クライアントやユーザーには「適用しない状態を維持する」という意味になります。
結果として、無効化された値はレジストリから消されるため、アプリケーションはデフォルト値で動作することになります。後述の「削除」とは動作が異なるので注意してください。
ポリシー化した設定値を無効にするには、以下のように「-Disable」を指定するだけです。
PS C:\> Set-GPRegistryValue -Name "TestPolicy" -Key "HKCU\Software\MyApp" -ValueName "InstallPath" -Disable |
上記の例では特定のエントリ(InstallPath)が対象となっていますが、以下のように「-ValueName」を指定しなければ、MyAppキー配下の全エントリを一度に無効にできます。
PS C:\> Set-GPRegistryValue -Name "TestPolicy" -Key "HKCU\Software\MyApp" -Disable |
「-Disable」で無効化した後で同じパスにレジストリ・エントリを書き込んでも、次回のバックグラウンド更新時にエントリが削除されてしまうことに注意してください。
レジストリ設定を削除するには
ポリシー自体を削除するには、「Remove-GPRegistryValue」というコマンドレットを使用します。これを使うと、きれいさっぱりGPOから削除されます。GPOから削除されたタイミングで、実際のレジストリ・パスからも削除されます。
Remove-GPRegistryValueコマンドレットの実行後に、手動で同じパスにエントリを追加しても、無効化したときのようにポリシーのバックグラウンド更新によって削除されることはありません。
以下は、特定のエントリ(InstallPath)のみを削除しています。よって、MyApp配下の他のエントリは削除されずに残ります。
PS C:\> Remove-GPRegistryValue -Name "TestPolicy" -Key "HKCU\Software\MyApp" -ValueName "InstallPath" |
MyAppキーごと削除する場合には、「-ValueName」を指定しないようにします。
PS C:\> Remove-GPRegistryValue -Name "TestPolicy" -Key "HKCU\Software\MyApp" |
「厳選ブログ転載」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|