対象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 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のみが利用できる。
リモートのレジストリにアクセスするためには、少なくとも次の条件を全て満たす必要がある。
詳細は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キー以下にある値が全て表示されるはずだ。
ローカルの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)。
■この記事と関連性の高い別の記事
Copyright© 1999-2018 Digital Advantage Corp. All Rights Reserved.