この記事では、PowerShellを使用してレジストリ値を取得し、さまざまな方法でレジストリのエントリをクエリする方法について学びます。
さあ始めましょう!
前提条件
この記事のすべての例は、この記事が公開された時点で最新バージョンであるPowerShell 7.1を使用してデモンストレーションされます。また、Windows PowerShell 5.1を選択して使用することもできます。また、PowerShellドライブの基本的な理解を持っている必要があります。
管理者特権なしでは一部の例が動作しない場合があります。
Get-ChildItem
を使用してレジストリキーと値を取得する
レジストリキーや値を検索する最も簡単な方法の1つは、Get-ChildItem
コマンドレットを使用することです。これにより、PowerShellドライブの項目を列挙することで、PowerShellを使用してレジストリ値などを取得することができます。この場合、そのPowerShellドライブはGet-PSDrive
を実行して見つかるHKLMドライブです。
次のコマンドをPowerShellコンソールで実行します。
以下のスクリーンショットでは、次のことがわかります:
- WindowsUpdateレジストリキーの完全なキーパス
- AUキー
- AUキー内のレジストリエントリのリストとそれに対応する値

上記のスクリーンショットに関して、1つのポイントがあります。出力が少し誤解を招くかもしれないことに注意してください。通常、PowerShellコンソールの出力はオブジェクトのプロパティを表します。しかし、この場合はGet-ChildItem
は異なる動作をします。なぜなら、このオブジェクトには厳密にはプロパティが存在しないからです。表示形式を生成するために、裏で追加のコマンドが実行されています。
関連記事: Windowsレジストリでの保留中の再起動の確認方法
Get-ItemProperty
を使用してレジストリの値を取得する
前と同じレジストリキーを使用して、今度はGet-ItemProperty
コマンドレットを使用して出力をより読みやすくします。
Get-ItemProperty
を使用すると、レジストリ内のキーとその値を取得するために最適です。以下のコマンドを実行します:
以下のスクリーンショットでは、キーと値のリストが表示されます:
- レジストリコンテナAUには、
- PSで始まるPowerShell関連のプロパティがあります。

代わりに、.NETを使用してレジストリアイテムのパスを指定して同じ出力をわずかに高速化することもできます。以下のコマンドは、.NET Registryクラスを使用してレジストリの値を取得するためにPowerShellで使用されます:
Get-ItemPropertyValue
を使用してレジストリの値を取得する
今、キーの値を見てみましょう。前と同じレジストリコンテナを使用して、キーNoAutoUpdate
の値を見てみましょう。次のPowerShellコマンドを実行してください:
Get-ItemPropertyValue
を使用すると、以前に表示された他の情報ではなく、値のみを表示するより簡潔な出力が得られます。

PSドライブを使用せずにレジストリをクエリする
このチュートリアルでは、レジストリを操作するためにPowerShellドライブを使用してきました。しかし、これが唯一の方法ではありません。.NETを活用して.NETクラスを使用してレジストリ情報を取得することもできます。
たとえば、リモートコンピュータ上のHKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\ : AutoUpateのレジストリ値をPowerShellで取得する必要があるかもしれません。
これは.NETを使用して次のように行うことができます:
- リモートコンピュータでレジストリ接続を開く。
2. 探している特定のレジストリキーを開く。
3. レジストリキー内のレジストリ値の値をクエリするためにGetValue()
メソッドを使用する。
PowerShellドライブではなく.NETを使用すると、レジストリキーと値をリモートコンピュータ上でクエリするための簡単な方法であり、速度も少し速くなります。
Test-Path
を使用してレジストリ値をテストする
時には、単にレジストリ値の存在を確認する必要がある場合もあります。その場合は、Test-Path
コマンドレットを使用します。
WindowsUpdate コンテナーの続きですが、次のPowerShellコマンドを実行してAUコンテナーが存在するかどうかをテストしてください。
結果がTrueの場合、キーまたはコンテナーが存在します。しかし、値またはエントリが存在するかどうかをテストする必要がある場合はどうすればよいでしょうか?このテストのためのカスタム関数を作成しましょう。
カスタム関数を使用すると、キーまたはコンテナーのパスと名前、および探している値を入力すると、カスタム関数は下のスクリーンショットに示すようにTrueまたはFalse(3)を返します。

次の手順
Get-ChildItem
、Get-ItemProperty
、およびGet-ItemPropertyValue
をPowerShellで使用してレジストリの値とキーを取得できることを知っていますが、他に何ができますか?
PowerShellでレジストリを操作する方法について詳しく学びたい場合は、Microsoft Docsの記事「レジストリキーの操作」をご覧ください。また、ATAブログの記事「Active Setupの使用:すべてのユーザーハイブにレジストリ値を設定する方法」では、レジストリ値の設定の素晴らしいデモンストレーションも紹介されています。
Source:
https://adamtheautomator.com/powershell-to-get-a-registry-value/