連載
» 2014年09月01日 05時00分 UPDATE

Tech TIPS:コマンドプロンプトでレジストリを操作する

レジストリを操作する際、レジストリエディターだと定型的な処理や多数のリモートコンピューターのメンテナンスには不便だ。そんなときはWindows OSに標準装備されているCUIベースのレジストリ操作ツール「reg」コマンドを活用しよう。

[打越浩幸, 島田広道,デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows XP/Windows 7/Windows 8/Windows 8.1/Windows Server 2003/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2



解説

 Windowsシステムの各部の調整をしたり、動作設定を変更したりするために、レジストリを操作しなければならないことがある。本TIPSでもすでに多くの操作例を紹介している。

 レジストリを操作するためには、一般的にはGUIベースのツール「regedit.exe」(レジストリエディター)を使うことが多い。だが何度も同じ処理を実行する場合や、多数のコンピューターに(リモートから)同じ設定を施すならば、コマンドラインで使えるようなツールがあれば便利である。

 Windows OSには、このような目的のために利用できるツールが用意されている。

操作方法

 コマンドプロンプト上でレジストリを操作するためには、「reg.exe」というツールが利用できる。Windows XP/Windows Server 2003以降のWindows OSでは、デフォルトのツールとしてあらかじめ用意されているので、すぐに使うことができる。

●regのサブコマンド

 regコマンドにはいくつかのサブコマンドがあり、例えばレジストリエントリを追加するなら「reg add <パラメーター列>」というようにして利用する。regコマンドで利用できるサブコマンドは次の通りである。

コマンド 意味 リモート
reg query 指定されたレジストリキーやそのサブツリーの値を表示する
reg add レジストリにキーや値名、値を追加したり、既存の値を修正したりする
reg delete レジストリから指定されたキーや値を削除する
reg copy レジストリのツリーをコピーする。ローカルコンピューターのレジストリ内だけでなく、2つのコンピューター間でのリモートコピーも可能
reg compare 指定された2カ所のレジストリ(ツリー)を比較して、その相違点もしくは同じ部分を表示する
reg save
関連記事
レジストリツリーの保存。指定されたサブキー以下のツリーを指定されたファイルに保存する。保存されたファイルは次の「reg restore」でのみ利用可能。リモートコンピューター上のレジストリを指定すると、そのコンピューター上の指定されたフォルダー(デフォルトは%SystemRoot%)にファイルが保存される (可)
reg restore
関連記事
reg saveで保存されたレジストリを、ローカルコンピューター上の指定されたツリーの場所に復元する。リモートコンピューターのレジストリをreg saveした場合は、そのコンピューターへログオンしてreg restoreする必要がある 不可
reg load
関連記事
reg saveで保存されたレジストリを、元とは異なる場所へロード/復元する。リモートのコンピューターへも書き戻せる 不可
reg unload
関連記事
reg load操作で読み込まれたレジストリのセクションを削除する 不可
reg export 指定されたキーやエントリ(とその値)をファイルに書き出す。GUI版のレジストリエディターでレジストリを書き出したときに作成されるファイル(〜.reg)と同じ形式で保存される 不可
reg import
関連記事
reg exportで書き出されたレジストリ値をローカルのコンピューターに書き戻す。エクスプローラー上で〜.regファイルをダブルクリックしたときの動作と同じ 不可
reg flags Windows Vista以降に実装された「レジストリ仮想化」の設定を変更/確認する。レジストリ仮想化とはUAC(ユーザーアカウント制御)と連動して、管理者だけがアクセスできるレジストリエントリへのアクセスを制御することで、アプリケーションを正常に実行できるようにする機能のこと。その詳細は「管理者権限での実行を制限するユーザー・アカウント制御UAC(後編)」を参照 不可
regコマンドのサブコマンドとその機能
regコマンドにはさまざまなサブコマンドがある。regコマンドの使い方は「reg /?」を実行すると表示される。さらに「reg add /?」のようにサブコマンドに続けて「/?」を指定すれば、サブコマンドごとの詳しい使い方が表示される。「リモート」の欄は、リモートコンピューターのレジストリを操作できるかどうかを表している。「可」となっている場合は、レジストリのキー名の先頭にコンピューター名を指定できる。

 regコマンドの使い方は、コマンドプロンプト上で「reg /?」として表示させるのが簡単でよいだろう。各サブコマンドについては、例えば「reg add /?」などとすれば、使い方やサンプルが表示される。

C:\>reg add /?

REG ADD キー名 [/v 値名 | /ve] [/t 種類] [/s セパレーター] [/d データ] [/f]
        [/reg:32 | /reg:64]

  キー名   [\\コンピューター\]完全キー
           コンピューター  リモート コンピューター名 - 省略した場合、現在の
                          コンピューターが既定として使われます。HKLM と HKU
                          のみリモート コンピューターで利用できます。
           完全キー        ルートキー\サブキー
           ルートキー      [ HKLM | HKCU | HKCR | HKU | HKCC ]
           サブキー        選択したルートキーの下のレジストリ キーの完全な名前。

  /v       選択したキーの下の追加される値名。

  /ve      キーの空の値名 (既定値) を追加します。

  /t       レジストリ キーのデータの種類
           [ REG_SZ    | REG_MULTI_SZ | REG_EXPAND_SZ |
             REG_DWORD | REG_QWORD    | REG_BINARY    | REG_NONE ]
           省略された場合、REG_SZ を想定します。
……(以下省略)……



●レジストリキーの指定方法

 regコマンドを利用する際には、そのパラメーターとしてレジストリのキーを指定する必要がある。レジストリには、目的に応じていくつかのルートキーが存在する。例えばインストール済みのソフトウェア全体に関わる設定は「HKEY_LOCAL_MACHINE\SOFTWARE」、ユーザーごとの設定は「HKEY_USERS」などである。だがこれらは非常に長いので、以下のような省略形式を利用することもできる。

キー 正式なキー名称 リモート
HKLM HKEY_LOCAL_MACHINE 利用可能
HKCU HKEY_CURRENT_USER 利用不可能
HKCR HKEY_CLASSES_ROOT 利用不可能
HKU HKEY_USERS 利用可能
HKCC HKEY_CURRENT_CONFIG 利用不可能
レジストリキーの省略形式
レジストリキーを指定する場合は、ここで示した省略形式でも指定できる。ただしリモートコンピューター上のレジストリを指定する場合は、HKLMとHKUのみが使用可能であり、他のキーは指定できない。

  この省略形を使うと、例えば「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft」は「HKLM\SOFTWARE\Microsoft」と短く省略して、簡潔に記述できる。

 リモートコンピューター上のレジストリを指定する場合は、キーの先頭に「\\コンピューター名\」を付ければよい。例えば「\\server1\HKLM\SOFTWARE\Microsoft」とする。ただし、リモートからレジストリを操作する場合は「CURRENT_USER(現在ログオンしているユーザー)」という概念はないので、HKLMとHKUのみが利用できる。

 リモートのレジストリにアクセスするためには、少なくとも次の条件を全て満たす必要がある。

  • リモートコンピューターに対する管理者権限を持っている
  • リモートコンピューターのRemote Registryサービスが起動している
  • ローカル/リモートコンピューター間でMicrosoft Windowsネットワークが正しく通信できる
  • リモートコンピューターのUACによってレジストリへのアクセスが制限されていない

 詳細はTIPS「リモートからレジストリを操作する」を参照していただきたい。

●レジストリ操作の例

 ここでは例として、Internet Explorer(IE)の自動更新を禁止する設定をリモートのコンピューターに対して施してみよう。それには、TIPS「Internet Explorer 11の自動インストールをブロックする」の「レジストリ設定でIE11の自動インストールを無効化する」で紹介したようにレジストリを設定する。

項目 内容
キー HKLM\SOFTWARE\Microsoft\Internet Explorer\Setup\<対象のIEのバージョン>
<対象のIEのバージョン>の名称:
8.0 → IE8
9.0 → IE9
10.0 → IE10
11.0 → IE11
値の名前 DoNotAllowIE80 → IE8
DoNotAllowIE90 → IE9
DoNotAllowIE10 → IE10
DoNotAllowIE11 → IE11
REG_DWORD
値の内容 1 → IEの自動更新を禁止する
0 → IEの自動更新を許可する(0にするか、この値そのものを削除する)
Windows UpdateによるIEの自動更新を禁止するためのレジストリ設定
対象のIEのバージョンによってキーや値の名前が異なるので注意していただきたい。

 この設定を行うためには、以下のようなコマンドを実行する。ここではログオンするコンピューター名はserver1、ユーザー名はuser01としている。自動更新を禁止する対象はIE8〜IE11とした。

※これはバッチファイルにした例

REM ----- server1と接続 -----
net use \\server1\ipc$ /user:server1\user01 *

REM ----- レジストリに値/データを追加 -----
reg add "\\server1\HKLM\SOFTWARE\Microsoft\Internet Explorer\Setup\8.0" /v DoNotAllowIE80 /t REG_DWORD /d 1 /f
reg add "\\server1\HKLM\SOFTWARE\Microsoft\Internet Explorer\Setup\9.0" /v DoNotAllowIE90 /t REG_DWORD /d 1 /f
reg add "\\server1\HKLM\SOFTWARE\Microsoft\Internet Explorer\Setup\10.0" /v DoNotAllowIE10 /t REG_DWORD /d 1 /f
reg add "\\server1\HKLM\SOFTWARE\Microsoft\Internet Explorer\Setup\11.0" /v DoNotAllowIE11 /t REG_DWORD /d 1 /f

REM ----- server1との接続を切断 -----
net use \\server1\ipc$ /delete



 最初と最後にある「net use \\server1\ipc$ 〜 」と「net use 〜 /delete」は、対象となるサーバーへの接続と切断を行うためのものである。このような共有指定を明示的に行うことにより、現在ログオンしているユーザーアカウントとは関係なく、対象となるコンピューターへ任意のアカウントで共有のためにログオンできる(必要なければ、省略してよい)。詳しくは右上の関連記事を参照していただきたい。

 途中にある「reg add "\\server1\HKLM〜" /v 〜 /t 〜 /d 〜 /f」が実際のレジストリ値をセットするためのコマンドである。1つのパラメーター文字列の途中に空白文字が入っている場合には、「"〜"」のように、ダブルクォート記号で囲むようにする。また文字列型(REG_SZ_〜)のデータの場合もダブルクォート記号で囲むのがよいだろう。REG_DWORDのような数値型の場合、数値を10進数か16進数で指定する(16進数の場合は先頭に「0x」を付けて「0x1234abcd」のようにする)。

 パラメーターの最後にある「/f」は、上書きするという指定である。すでに存在しているキーや値の内容を変更する場合は、このオプションがないと、上書きしてもよいかどうかをいちいち聞かれることになる。

 設定した値を確認するには、例えば以下のようなコマンドラインを実行すればよい。

C:\>reg query "\\server1\HKLM\SOFTWARE\Microsoft\Internet Explorer\Setup" /s

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Setup\10.0 ……キー名
    DoNotAllowIE10 REG_DWORD 0x1 ……値と型、データ

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Setup\11.0
    DoNotAllowIE11 REG_DWORD 0x1

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Setup\8.0
    DoNotAllowIE80 REG_DWORD 0x1

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Setup\9.0
    DoNotAllowIE90 REG_DWORD 0x1

C:\>



 「/s」というオプションは、指定されたキー以下にある全てのサブキーの情報を表示させるという指定である。これにより、Setupキー以下にある値が全て表示されるはずだ。

●64bit版Windows OSのレジストリにアクセスする際の注意点

 ローカルの32bit(x86)版Windows OSから、リモートの64bit(x64)版Windows OSのレジストリにregコマンドでアクセスすると、HKLM\SOFTWAREキー以下にある64bit版プログラム(アプリケーション)に関するエントリを参照できないことがある。というのも、64bit版Windows OSでは32bit版と64bit版プログラムでレジストリエントリが別々に管理されていて、32bit版プログラム(この場合はregコマンド)からのアクセスは自動的に32bit用のレジストリエントリへリダイレクトされるようになっているからだ。

 このような状況で、もし明示的に64bit版プログラム用のレジストリエントリを参照/設定したければ、「/reg:64」というオプションを指定してregコマンドを実行する必要がある。このオプションはWindows 7以降であれば標準で利用できる。しかし、Windows Server 2003の場合は次のページから修正プログラムを入手・適用する必要がある。

 64bit版Windows OSから、64bit版Windows OSの32bit版プログラム用レジストリエントリを参照/設定する場合は、「/reg:32」というオプションを指定する必要がある(デフォルトでは64bit用エントリへリダイレクトされるため)。


 このようにregコマンドを使えば、レジストリの設定作業を簡単に実行できる。多数のリモートコンピューターに対してまとめて設定を変更したいといった場合に役に立つだろう。

■更新履歴

【2014/09/01】Windows 7以降および64bit版のWindows OSの情報を追記しました。またレジストリの操作例をIEの自動更新禁止に差し替えました。Windows 2000に関する情報は削除しました。

【2004/02/21】初版公開(対象OSはWindows 2000/Windows XP/Windows Server 2003)。


「Tech TIPS」のインデックス

Tech TIPS

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

Touch Barという新UIを得た「MacBook Pro」、プレゼント!

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。