レジストリ キーの操作

このサンプルは Windows プラットフォームにのみ適用されます。

レジストリ キーは PowerShell ドライブ上の項目であるため、それらの操作はファイルやフォルダーの操作によく似ています。 1 つの決定的な違いは、レジストリ ベースの PowerShell ドライブ上のすべての項目は、ファイル システム ドライブ上のフォルダーと同じように、コンテナーであることです。 ただし、レジストリ エントリとそれに関連する値は、個別の項目ではなく、項目のプロパティです。

レジストリ キーのすべてのサブキーを一覧表示

Get-ChildItem を使うと、レジストリ キーの直下にあるすべての項目を表示することができます。 非表示の項目やシステム項目を表示するには、オプションの Force パラメーターを追加します。 たとえば、次のコマンドは、HKEY_CURRENT_USER レジストリ ハイブに対応する、PowerShell ドライブ HKCU: の直下にある項目を表示します。

Get-ChildItem -Path HKCU:\ | Select-Object Name
   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

Name
----
HKEY_CURRENT_USER\AppEvents
HKEY_CURRENT_USER\Console
HKEY_CURRENT_USER\Control Panel
HKEY_CURRENT_USER\DirectShow
HKEY_CURRENT_USER\dummy
HKEY_CURRENT_USER\Environment
HKEY_CURRENT_USER\EUDC
HKEY_CURRENT_USER\Keyboard Layout
HKEY_CURRENT_USER\MediaFoundation
HKEY_CURRENT_USER\Microsoft
HKEY_CURRENT_USER\Network
HKEY_CURRENT_USER\Printers
HKEY_CURRENT_USER\Software
HKEY_CURRENT_USER\System
HKEY_CURRENT_USER\Uninstall
HKEY_CURRENT_USER\WXP
HKEY_CURRENT_USER\Volatile Environment

これらは、レジストリ エディター (regedit.exe) で HKEY_CURRENT_USER の下に表示される最上位のキーです。

レジストリ プロバイダーの名前とその後に :: を指定することにより、このレジストリ パスを指定することもできます。 レジストリ プロバイダーの完全名は Microsoft.PowerShell.Core\Registry ですが、短縮して Registry だけにすることができます。 次のいずれのコマンドを使用しても、HKCU: の直下にある内容を一覧表示できます。

Get-ChildItem -Path Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Registry::HKCU
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU
Get-ChildItem HKCU:

これらのコマンドは、cmd.exeDIR コマンドや UNIX シェルの ls を使用したときと同様に、直接含まれている項目のみ一覧表示します。 内包されている項目を表示するには、Recurse パラメーターを指定する必要があります。 HKCU: 内のすべてのレジストリ キーを一覧表示するには、次のコマンドを使用します。

Get-ChildItem -Path HKCU:\ -Recurse

Get-ChildItem は、PathFilterIncludeExclude の各パラメーターを使用して複雑なフィルター処理機能を実行できますが、これらのパラメーターは通常、名前にのみ基づいています。 Where-Object コマンドレットを使うと、項目の他のプロパティに基づいた複雑なフィルター処理を実行できます。 次のコマンドは、1 つのサブキーと 4 つの値を持つ、HKCU:\Software 内のすべてのキーを検索します。

Get-ChildItem -Path HKCU:\Software -Recurse |
    Where-Object {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }

キーのコピー

コピーは Copy-Item を使用して行われます。 次の例では、HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion サブキーとそのすべてのプロパティを、HKCU:\ にコピーします。

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU:

レジストリ エディター内、または Get-ChildItem を使用してこの新しいキーを調べると、格納されているサブキーのコピーが新しい場所に存在しないことがわかります。 コンテナーのすべての内容をコピーするために、Recurse パラメーターを指定する必要があります。 上記のコピー コマンドを再帰的に実行するには、次のコマンドを使用します。

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU: -Recurse

ファイル システムのコピーは、使用可能な他の既存のツールを使用して行うこともできます。 任意のレジストリ編集ツール (reg.exeregini.exeregedit.exe など) およびレジストリの編集をサポートする COM オブジェクト (WScript.Shell や WMI の StdRegProv クラスなど) を PowerShell 内から使用できます。

キーの作成

レジストリでのキーの新規作成は、ファイル システムに新しい項目を作成するよりも簡単です。 すべてのレジストリ キーはコンテナーであるため、項目の種類を指定する必要はありません。 次のように、明示的なパスを指定するだけです。

New-Item -Path HKCU:\Software_DeleteMe

また、プロバイダーに基づくパスを使用して、キーを指定することもできます。

New-Item -Path Registry::HKCU\Software_DeleteMe

キーの削除

項目の削除は、基本的にすべてのプロバイダーで同じです。 次のコマンドを実行すると、確認を求められずに項目が削除されます。

Remove-Item -Path HKCU:\Software_DeleteMe
Remove-Item -Path 'HKCU:\key with spaces in the name'

特定のキーの下にあるすべてのキーの削除

内包されている項目を削除するには、Remove-Item を使用します。ただし、その項目に他の何らかの項目が含まれている場合は、削除の確認を求められます。 たとえば、作成した HKCU:\CurrentVersion サブキーを削除しようとしすると、次のメッセージが表示されます。

Remove-Item -Path HKCU:\CurrentVersion
Confirm
The item at HKCU:\CurrentVersion\AdminDebug has children and the -recurse
parameter was not specified. If you continue, all children will be removed with
the item. Are you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

確認のメッセージを表示せずに、内包されている項目を削除するには、Recurse パラメーターを指定します。

Remove-Item -Path HKCU:\CurrentVersion -Recurse

HKCU:\CurrentVersion 内のすべての項目を削除しますが、HKCU:\CurrentVersion そのものは削除しない場合は、代わりに次のように入力します。

Remove-Item -Path HKCU:\CurrentVersion\* -Recurse