レジストリ キーは、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 では、Path、Filter、Include、Exclude の各パラメーターを使って複雑なフィルター機能を実行できますが、通常、フィルターが適用されるのは名前のみです。他の項目のプロパティも使用した複雑なフィルターを実行するには、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