レジストリエディタ以外、reg.exeコマンドやPowerShellからレジストリを操作する
ASCII.jp / 2022年11月20日 10時0分
Windowsにおけるレジストリは、設定を記憶する「データベース」。Windowsの利用歴が長いユーザーなら、1回くらいはなんらか触ったことがあるだろう。
そのレジストリの操作では、「レジストリエディタ」が有名で、インターネットでの関連記事のほとんどがこれを使っている。しかし、レジストリにアクセスする方法は、レジストリエディタだけではない。
そもそもWindowsにおけるレジストリとは?
レジストリはWindows固有の機能だが、一般的には「キー、バリューストア」からなる。ただし、レジストリの場合、1つのキーに複数の「値」(バリュー)が存在できるため、値には名前がある。「値」だと理解しにくいこともあるのか、マイクロソフトのドキュメントなどでは「レジストリエントリ」と表記することもあるようだ。
レジストリエディタの左側のペインに表示されるのがキーであり、右側に表示されるのが「値」だ。「値」は、「名前」「種類」「データ」がある。「データ」と言わずに「値」とするのが素直なのだが、全体が「値」なので、これを「値」と呼ぶのも混乱の元。そこで「データ」になっているのだと思われる。
各キーには1つだけ名前のない値がある。ドキュメントなどでは「既定値」などと表記されるが、レジストリエディタでは「(既定)」などと表示される。これは名前のない文字列値で、標準ではデータは中身のないヌルストリングになっている。これを使うことで、キーと値で一組となる、従来のキーバリューストアと同じことが可能になる。
レジストリキーは、複数のルートキーから構成されている。ルートキーには、以下の表のようなものがあり、それぞれ役目がある。
レジストリにアクセスする方法はさまざま
レジストリにアクセスする方法は複数ある。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」サブコマンドだけ、使いこなせるようにしておけばいいだろう。
QUERYサブコマンドは、簡単に言えば、ルートキーから始まる完全キーを指定して、そこにある値を表示させるものだ。オプション「/s」で再帰的にサブキーの持つ値を表示できる。なお、Windows 10/11に付属しているreg.exeでは、オプション指定文字に「/」だけでなく、「-」を指定しても動く。最近のWindowsのコマンドは、Unixと同じくハイフンを使うものが増えてきた。このため、どっちでもいいようになっている。実際、両者を区別するのはかなり面倒だ。
キーを指定して値を調べるには、
reg.exe query HKCR\.shiodatest
などのようにQUERYサブコマンドでキーを指定する。
これで、キーに含まれる値(名前、種類、データ)とサブキー(直下のものだけ)を表示する。多数の値があり、特定の値だけがほしい場合には、「/v 名前」を指定する。また、キーの既定値を表示させたい場合には「/ve」を指定する。
ほとんどの場合、これだけでレジストリの確認ができる。また、「/s」オプションを付けることで、指定したキーのサブキー以下すべてを出力する。
キー、名前、データの検索には、「/f」オプションを使う。機能的には、レジストリエディタの検索機能とほとんど同じだ。
reg.exe HKCR\.shiodatest /f shell
とすると、指定したキー(HKCR\.shiodatest)以下で、「shell」が、サブキー、名前、データの中から検索される。
対象を限定したときには、「/k」(キー)、「/v」(名前)、「/d」(データ)を指定する。
reg.exeコマンドで、キーや値を変更する場合、ADDサブコマンドを使う。可能なのは、キー、値の新規追加か、既存のキー、値の上書き変更である。reg.exeでは名前の変更などは直接はできない。
PowerShellからのレジストリアクセス
PowerShellではレジストリ専用のコマンドが存在しない。PSドライブという機能を使い、レジストリをファイルのように扱う。このとき、ファイルと同じ「Item」系コマンドを使う。
キーがパス、値がファイルである。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を使う。
少し面倒な感じもあるが、PowerShellでは、タブによる補完が可能で、レジストリキーにも有効なため、reg.exeコマンドよりも、入力効率がいいというメリットがある。また、結果を変数に保存してコマンドの繰り返しを避けたり、さまざまなコマンドで対象を絞る、データを抽出するといったことが可能である。
ただ、意外と検索が面倒だ。PowerShellでは、一般にコマンドを使って対象を含むデータを列挙して、その中から目的のものを選択するという考えになる。レジストリキーや名前での検索は難しくないが、データでの検索はかなり面倒なコマンドになり、reg.exeを使ったほうが手っ取り早い。
その代わりといってはなんだが、キーや名前の変更、データの追記といった処理は比較的簡単だ。reg.exeでは、データは書き換えしかできないため、元のデータを表示させて、これをADDサブコマンドの引数に含めて上書き用のデータを指定する必要がある。
レジストリエディタは、基本的な機能を網羅しているため、たいていはこれで十分なのだが、ウィンドウを開いたり、キーを探すのが面倒に感じることがある。コマンドラインを使っているなら、レジストリを確認したい場合には、reg.exeコマンドを使えばいいだろう。
この記事に関連するニュース
-
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた
ASCII.jp / 2024年11月24日 10時0分
-
窓辺の小石 第191回 リンクの冒険
マイナビニュース / 2024年11月8日 17時3分
-
あらためてIPv6基本のキ
ASCII.jp / 2024年11月3日 10時0分
-
修正済みWindows、パッチをロールバックして脆弱な状態にする方法発見
マイナビニュース / 2024年10月28日 11時43分
-
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法
ASCII.jp / 2024年10月27日 10時0分
ランキング
-
1メルカリ、不正利用へのサポート強化と補償方針を発表 ネットで意見「当たり前」「個人的には期待」「悪意のあるやつは排除して」
iza(イザ!) / 2024年11月25日 13時21分
-
2ビューカード、顧客との通話内容を録音したSDカード20枚を紛失
ASCII.jp / 2024年11月25日 17時5分
-
3スタバ福袋当選発表に悲喜こもごも SNS「3度目の正直来た」「外れてうつになりそう」
iza(イザ!) / 2024年11月25日 12時11分
-
4前澤友作さんの「カブアンド」、モバイルサービスに申込殺到で不具合 一部利用者が通信できない状態に
ITmedia NEWS / 2024年11月25日 16時39分
-
5『MOTHER2』30周年キャンペーンがローソンでスタート!おとなもこどもも、おねーさんも嬉しくなっちゃうラインナップ
インサイド / 2024年11月25日 0時0分
記事ミッション中・・・
記事にリアクションする
記事ミッション中・・・
記事にリアクションする
エラーが発生しました
ページを再読み込みして
ください