レジストリ キーは、Windows PowerShell ドライブ上の項目であるため、ファイルやフォルダーとほぼ同じように操作できます。ただし、両者には決定的な違いもあります。レジストリ ベースの Windows PowerShell ドライブでは、すべての項目がコンテナー (ファイル システムのドライブにおけるフォルダーのようなもの) であるという点です。レジストリのエントリや関連する値は、項目の "プロパティ" であり、項目としては位置付けられていません。

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

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

PS> Get-ChildItem -Path hkcu:\


   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

SKC  VC Name                           Property
---  -- ----                           --------
  2   0 AppEvents                      {}
  7  33 Console                        {ColorTable00, ColorTable01, ColorTab...
 25   1 Control Panel                  {Opened}
  0   5 Environment                    {APR_ICONV_PATH, INCLUDE, LIB, TEMP...}
  1   7 Identities                     {Last Username, Last User ...
  4   0 Keyboard Layout                {}
...

レジストリ エディター (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.exe の DIR コマンドや UNIX シェルの ls と同様、これらのコマンドでは、直下に存在する項目しか表示されません。格納されているすべての項目を表示するには、Recurse パラメーターを指定する必要があります。HKCU 内のすべてのレジストリ キーを一覧表示するには、次のコマンドを使用します (この操作にはかなりの時間がかかることがあります)。

Get-ChildItem -Path hkcu:\ -Recurse

Get-ChildItem では、PathFilterIncludeExclude の各パラメーターを使って複雑なフィルター機能を実行できますが、通常、フィルターが適用されるのは名前のみです。他の項目のプロパティも使用した複雑なフィルターを実行するには、Where-Object コマンドレットを使用します。次のコマンドは、HKCU:\Software を対象に、サブキーが 1 つで、かつ、値が 4 つ存在するすべてのキーを検索します。

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

キーのコピー

コピーを実行するには、Copy-Item を使用します。次のコマンドを実行すると、HKCU:\ に "CurrentVersion" という新しいキー名が作成され、HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion およびそのすべてのプロパティがコピーされます。

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.exe、regini.exe、regedit.exe など) や、レジストリ編集をサポートする COM オブジェクト (WScript.Shell や WMI の StdRegProv クラスなど) を Windows PowerShell 内から使用できます。

キーの作成

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

New-Item -Path hkcu:\software\_DeleteMe

プロバイダー ベースのパスを使ってキーを指定することもできます。

New-Item -Path Registry::HKCU\_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




目次