レジストリ エントリはキーのプロパティであるため、直接参照することはできません。レジストリ エントリを操作するためには、やや異なるアプローチが必要です。

レジストリ エントリを一覧表示する

レジストリ エントリは、さまざまな方法で調べることができます。最も簡単な方法は、キーに関連付けられているプロパティ名を取得することです。たとえば、レジストリ キー 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" というプレフィックスが付きます (PSPathPSParentPathPSChildNamePSProvider など)。

現在の場所は、"." という表記で参照できます。まず、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\HelpItemProperty を一覧表示できます。

単一のレジストリ エントリを取得する

レジストリ キーの特定のエントリを取得する場合、いくつかの方法が考えられます。この例で検索されるのは、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 には、FilterInclude、および 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




目次