レジストリ エントリはキーのプロパティであるため、直接参照することはできません。レジストリ エントリを操作するためには、やや異なるアプローチが必要です。
レジストリ エントリを一覧表示する
レジストリ エントリは、さまざまな方法で調べることができます。最も簡単な方法は、キーに関連付けられているプロパティ名を取得することです。たとえば、レジストリ キー HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion 内のエントリの名前を表示するには、Get-Item を使用してください。レジストリ キーには、"Property" という汎用的な名前のプロパティがあります。このプロパティの実体は、そのキーに存在するレジストリ エントリのリストです。次のコマンドでは、Property プロパティを選択し、項目を展開して、一覧形式で表示しています。
PS> Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property DevicePath MediaPathUnexpanded ProgramFilesDir CommonFilesDir ProductId
さらに見やすい形式でレジストリ エントリを表示するには、Get-ItemProperty を使用します。
PS> Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO FTWARE\Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO FTWARE\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry DevicePath : C:\WINDOWS\inf MediaPathUnexpanded : C:\WINDOWS\Media ProgramFilesDir : C:\Program Files CommonFilesDir : C:\Program Files\Common Files ProductId : 76487-338-1167776-22465 WallPaperDir : C:\WINDOWS\Web\Wallpaper MediaPath : C:\WINDOWS\Media ProgramFilesPath : C:\Program Files PF_AccessoriesName : Accessories (default) :
レジストリ キーのプロパティのうち、Windows PowerShell に関連したプロパティには、すべて "PS" というプレフィックスが付きます (PSPath、PSParentPath、PSChildName、PSProvider など)。
現在の場所は、"." という表記で参照できます。まず、Set-Location を使用して、CurrentVersion レジストリ コンテナーに移動します。
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
あるいは、Set-Location には、組み込みの HKLM PSDrive を使用する方法もあります。
Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion
次に、現在の場所を "." と表記すると、フル パスを指定せずにプロパティを一覧表示できます。
PS> Get-ItemProperty -Path . ... DevicePath : C:\WINDOWS\inf MediaPathUnexpanded : C:\WINDOWS\Media ProgramFilesDir : C:\Program Files ...
パスは、ファイル システムの場合と同じように展開されます。したがって、この場所から、「Get-ItemProperty -Path ..\Help」と入力することで、HKLM:\SOFTWARE\Microsoft\Windows\Help の ItemProperty を一覧表示できます。
単一のレジストリ エントリを取得する
レジストリ キーの特定のエントリを取得する場合、いくつかの方法が考えられます。この例で検索されるのは、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 内の DevicePath の値です。
Get-ItemProperty を使用して、Path パラメーターにキーの名前を指定し、Name パラメーターに DevicePath エントリの名前を指定します。
PS> Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry DevicePath : C:\WINDOWS\inf
このコマンドを実行すると、DevicePath プロパティのほか、Windows PowerShell の標準的なプロパティが返されます。
注意事項: | |
Get-ItemProperty には、Filter、Include、および Exclude の各パラメーターがありますが、プロパティ名によるフィルター処理には使用できません。これらのパラメーターで参照されるのは、レジストリ エントリ (項目のプロパティ) ではなく、レジストリ キー (項目のパス) です。 |
もう一つの方法は、Reg.exe コマンド ライン ツールを使用することです。コマンド プロンプトで「reg.exe /?」と入力すると、reg.exe のヘルプを表示できます。次のコマンドは、reg.exe を使用して、DevicePath エントリを検索する例です。
PS> reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion DevicePath REG_EXPAND_SZ %SystemRoot%\inf
一部のレジストリ エントリは、WshShell COM オブジェクトを使って検索することもできます。ただし、この方法では、大きなバイナリ データや、特定の文字 ("\" など) を含むレジストリ エントリ名を正しく扱うことができません。"\" をセパレーターとして使用し、項目のパスにプロパティ名を追加します。
PS> (New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath") %SystemRoot%\inf
新しいレジストリ エントリを作成する
"PowerShellPath" という新しいエントリを CurrentVersion キーに追加するには、パラメーターとしてキーのパス、エントリ名、およびエントリの値を指定して、New-ItemProperty を実行します。この例では、Windows PowerShell のインストール ディレクトリのパスを格納する Windows PowerShell 変数 $PSHome を値として使用します。
次のコマンドを使用してキーに新しいエントリを追加すると、作成された新しいエントリに関する情報も返されます。
PS> New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR E\Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR E\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PowerShellPath : C:\Program Files\Windows PowerShell\v1.0
PropertyType には、次の表に示した Microsoft.Win32.RegistryValueKind 列挙体メンバーの名前を指定する必要があります。
PropertyType の値 | 意味 |
---|---|
Binary |
バイナリ データ |
DWord |
有効な UInt32 型の数値 |
ExpandString |
動的に展開される環境変数を保持できる文字列 |
MultiString |
複数行の文字列 |
String |
任意の文字列値 |
QWord |
8 バイトのバイナリ データ |
注意事項: | |
Path パラメーターの値に配列を指定すると、レジストリ エントリを複数の場所に追加できます。 |
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
New-ItemProperty コマンドに Force パラメーターを追加することにより、既存のレジストリ エントリ値を上書きすることもできます。
レジストリ エントリの名前を変更する
PowerShellPath エントリの名前を "PSHome" に変更するには、Rename-ItemProperty を使用します。
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome
名前変更後の値を表示するには、コマンドに PassThru パラメーターを追加します。
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru
レジストリ エントリを削除する
PSHome と PowerShellPath の両方のレジストリ エントリを削除するには、Remove-ItemProperty を使用します。
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath