レジストリエディタ以外、reg.exeコマンドやPowerShellからレジストリを操作する
ASCII.jp / 2022年11月20日 10時0分
Windowsにおけるレジストリは、設定を記憶する「データベース」。Windowsの利用歴が長いユーザーなら、1回くらいはなんらか触ったことがあるだろう。
そのレジストリの操作では、「レジストリエディタ」が有名で、インターネットでの関連記事のほとんどがこれを使っている。しかし、レジストリにアクセスする方法は、レジストリエディタだけではない。
![](https://ascii.jp/img/2022/11/19/3452734/x/1f7d3d944fd0ed17.png)
そもそもWindowsにおけるレジストリとは?
レジストリはWindows固有の機能だが、一般的には「キー、バリューストア」からなる。ただし、レジストリの場合、1つのキーに複数の「値」(バリュー)が存在できるため、値には名前がある。「値」だと理解しにくいこともあるのか、マイクロソフトのドキュメントなどでは「レジストリエントリ」と表記することもあるようだ。
レジストリエディタの左側のペインに表示されるのがキーであり、右側に表示されるのが「値」だ。「値」は、「名前」「種類」「データ」がある。「データ」と言わずに「値」とするのが素直なのだが、全体が「値」なので、これを「値」と呼ぶのも混乱の元。そこで「データ」になっているのだと思われる。
各キーには1つだけ名前のない値がある。ドキュメントなどでは「既定値」などと表記されるが、レジストリエディタでは「(既定)」などと表示される。これは名前のない文字列値で、標準ではデータは中身のないヌルストリングになっている。これを使うことで、キーと値で一組となる、従来のキーバリューストアと同じことが可能になる。
レジストリキーは、複数のルートキーから構成されている。ルートキーには、以下の表のようなものがあり、それぞれ役目がある。
![](https://ascii.jp/img/2022/11/19/3452738/x/c32e941f894e8a01.png)
レジストリにアクセスする方法はさまざま
レジストリにアクセスする方法は複数ある。1つはレジストリエディタだが、そのほかに「reg.exe」コマンドとPowerShellのコマンド、Windows Scripting Hostも使える。また、Visual BASICなどのプログラミング言語からもアクセスは可能だ。Windowsの.NET、.NET Frameworkにはレジストリを扱うオブジェクトが用意されているため、.NET/.NET Frameworkを扱える言語は、基本的にレジストリも扱えるようになっている。
とはいえ、ユーザーレベルで簡単にアクセスする方法としては、レジストリエディタを除けば、コマンドラインのreg.exeコマンドかPowerShellくらいだ。ウィンドウを開く手間を考えれば、どれも同じだが、コマンドラインで作業しているとき、ちょっとレジストリを確認したいといった場合には、reg.exeコマンドを使うのが簡単だろう。なお、レジストリキーには、アクセス制御が適用できるため、レジストリの書き換えには管理者権限が必要になる。
では、まずコマンドラインのreg.exeコマンド
キーや名前が判明しているレジストリエントリを表示するには、reg.exeコマンドが適している。reg.exeコマンドは、レジストリエディタで可能なことの大半が実行できる。また、キーをコピーしたり、特定のキーとそのサブキー、そして「値」をファイルに保存し、あとから書き戻せるほか、他のキーの下に読み込むといったことも可能だ。
ただ、reg.exeコマンドは、表示や検索することに比べると、キーや値の編集操作は面倒ではある。コマンドラインゆえに、タイプミスといったエラーが入り込む余地もある。筆者も、レジストリを書き換える場合には、他の方法を使うことが多い。レジストリエディタならキーをたどっていくため、タイプミスなどをしにくく、大きな勘違いをしない限り、間違ったキーで操作してしまうことはない。
reg.exeには、サブコマンドとオプション、パラメーターでレジストリにアクセスする。サブコマンドには、以下の表のようなものがある。まずは、「QUERY」サブコマンドだけ、使いこなせるようにしておけばいいだろう。
![](https://ascii.jp/img/2022/11/19/3452739/x/30434d63b9497a70.png)
QUERYサブコマンドは、簡単に言えば、ルートキーから始まる完全キーを指定して、そこにある値を表示させるものだ。オプション「/s」で再帰的にサブキーの持つ値を表示できる。なお、Windows 10/11に付属しているreg.exeでは、オプション指定文字に「/」だけでなく、「-」を指定しても動く。最近のWindowsのコマンドは、Unixと同じくハイフンを使うものが増えてきた。このため、どっちでもいいようになっている。実際、両者を区別するのはかなり面倒だ。
キーを指定して値を調べるには、
reg.exe query HKCR\.shiodatest
などのようにQUERYサブコマンドでキーを指定する。
![](https://ascii.jp/img/2022/11/19/3452735/x/9843822e020e7c9b.png)
これで、キーに含まれる値(名前、種類、データ)とサブキー(直下のものだけ)を表示する。多数の値があり、特定の値だけがほしい場合には、「/v 名前」を指定する。また、キーの既定値を表示させたい場合には「/ve」を指定する。
ほとんどの場合、これだけでレジストリの確認ができる。また、「/s」オプションを付けることで、指定したキーのサブキー以下すべてを出力する。
キー、名前、データの検索には、「/f」オプションを使う。機能的には、レジストリエディタの検索機能とほとんど同じだ。
reg.exe HKCR\.shiodatest /f shell
とすると、指定したキー(HKCR\.shiodatest)以下で、「shell」が、サブキー、名前、データの中から検索される。
![](https://ascii.jp/img/2022/11/19/3452736/x/63a779511e36593d.png)
対象を限定したときには、「/k」(キー)、「/v」(名前)、「/d」(データ)を指定する。
![](https://ascii.jp/img/2022/11/19/3452740/x/a94afa8639b3fb75.png)
reg.exeコマンドで、キーや値を変更する場合、ADDサブコマンドを使う。可能なのは、キー、値の新規追加か、既存のキー、値の上書き変更である。reg.exeでは名前の変更などは直接はできない。
PowerShellからのレジストリアクセス
PowerShellではレジストリ専用のコマンドが存在しない。PSドライブという機能を使い、レジストリをファイルのように扱う。このとき、ファイルと同じ「Item」系コマンドを使う。
![](https://ascii.jp/img/2022/11/19/3452741/x/36a9768ca0448a94.png)
キーがパス、値がファイルである。PSドライブとは、さまざまなデータをファイルシステムのように扱うための仕組み。ファイルシステムでは、「C」や「D」などのドライブ文字がPSドライブになっているが、レジストリではルートキーがPSドライブである。PSドライブは、パスの頭に付け、コロンを介して以下にパスを記述する。
たとえば「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft」は、「HKLM:\SOFTWARE\Microsoft」と表記できる。
Get-Item HKLM:\SOFTWARE\Microsoft
のように使う。
PSドライブが定義されていないルートキーは、レジストリプロバイダー(Microsoft.PowerShell.Core\Registry::だが、Registry::と表記できる)を使って「Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft」と記述する。
標準では「HKCU」と「HKLM」の2つが定義されている。また、New-PSDriveコマンドを使えば、他のルートキーをPSドライブとして定義することもできる。たとえば、
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
で、「HKEY_CLASSES_ROOT」を「HKCR」というPSドライブに定義できる。
こうした仕組みになっているため、PowerShellでレジストリを扱うときには、ちょっと頭を切り替える必要がある。
たとえば、キーにある値を列挙するには、Get-Itemを使う。 レジストリの場合、「Get-ItemProperty」でも値を列挙できる。ただし、この場合、PowerShellのプロパティ(PSで始まる)が付加される。サブキーを含めて表示させたい場合には、Get-ChildItemを使う。
![](https://ascii.jp/img/2022/11/19/3452737/x/ec65caf4e1aedbce.png)
少し面倒な感じもあるが、PowerShellでは、タブによる補完が可能で、レジストリキーにも有効なため、reg.exeコマンドよりも、入力効率がいいというメリットがある。また、結果を変数に保存してコマンドの繰り返しを避けたり、さまざまなコマンドで対象を絞る、データを抽出するといったことが可能である。
ただ、意外と検索が面倒だ。PowerShellでは、一般にコマンドを使って対象を含むデータを列挙して、その中から目的のものを選択するという考えになる。レジストリキーや名前での検索は難しくないが、データでの検索はかなり面倒なコマンドになり、reg.exeを使ったほうが手っ取り早い。
その代わりといってはなんだが、キーや名前の変更、データの追記といった処理は比較的簡単だ。reg.exeでは、データは書き換えしかできないため、元のデータを表示させて、これをADDサブコマンドの引数に含めて上書き用のデータを指定する必要がある。
レジストリエディタは、基本的な機能を網羅しているため、たいていはこれで十分なのだが、ウィンドウを開いたり、キーを探すのが面倒に感じることがある。コマンドラインを使っているなら、レジストリを確認したい場合には、reg.exeコマンドを使えばいいだろう。
この記事に関連するニュース
-
Excelをノーコードで自動化しよう! パワークエリの教科書 第8回 パワークエリの“大まかな流れ”を復習しよう
マイナビニュース / 2024年7月1日 11時0分
-
Windowsはなぜ再起動が必要になるのか?
ASCII.jp / 2024年6月30日 10時0分
-
Windowsが今更(?)開発者に優しくなろうとしている!? 「Dev Home」は開発者にとって使い物になる?
ASCII.jp / 2024年6月23日 10時0分
-
Windowsの検索プロトコルを悪用してマルウェア配布するサイバー攻撃に注意
マイナビニュース / 2024年6月17日 9時16分
-
窓辺の小石 第170回 ネットの総和
マイナビニュース / 2024年6月14日 10時13分
ランキング
-
1Windows 11、更新プログラム(KB5039302)により繰り返し再起動する問題発生
マイナビニュース / 2024年6月30日 17時16分
-
2Windowsはなぜ再起動が必要になるのか?
ASCII.jp / 2024年6月30日 10時0分
-
3【今日から】JR東日本、Suicaで30回以上買い物すると1万円相当のポイント当たる
ASCII.jp / 2024年7月1日 7時0分
-
4Apple、App Storeで2つのPCエミュレーターアプリを拒否 - その理由は
マイナビニュース / 2024年7月1日 9時42分
-
5もはや“着る網戸”!? ワークマンのガチすぎる「虫対策スーツ」に思わず仰天 「めっちゃ欲しい」
ねとらぼ / 2024年6月30日 20時0分
記事ミッション中・・・
記事にリアクションする
![](/pc/img/mission/mission_close_icon.png)
記事ミッション中・・・
記事にリアクションする
![](/pc/img/mission/point-loading.png)
エラーが発生しました
ページを再読み込みして
ください
![](/pc/img/mission/mission_close_icon.png)