レジストリ エントリの操作Working with Registry Entries

レジストリ エントリはキーのプロパティであり直接参照できないため、利用するときは少し異なる方法を取る必要があります。Because registry entries are properties of keys and, as such, cannot be directly browsed, we need to take a slightly different approach when working with them.

レジストリ エントリの一覧表示Listing Registry Entries

レジストリ エントリを確認するには、多くのさまざまな方法があります。There are many different ways to examine registry entries. 最も簡単な方法は、キーに関連付けられているプロパティの名前を取得することです。The simplest way is to get the property names associated with a key. たとえば、レジストリ キー HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion のエントリの名前を確認するには、Get-Item を使います。For example, to see the names of the entries in the registry key HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion, use Get-Item. レジストリ キーは、キーのレジストリ エントリの一覧であり、"Property"という汎用的な名前のプロパティを持っています。Registry keys have a property with the generic name of "Property" that is a list of registry entries in the key. 次のコマンドは、Property プロパティを選択し、一覧に表示されるように項目を拡張します。The following command selects the Property property and expands the items so that they are displayed in a list:

Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
  Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId

レジストリ エントリをさらに読みやすい形式で表示するには、Get-ItemProperty を使います。To view the registry entries in a more readable form, use Get-ItemProperty:

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 関連のプロパティには、PSPathPSParentPathPSChildName、および PSProvider のように、すべて先頭に "PS" が付きます。The Windows PowerShell-related properties for the key are all prefixed with "PS", such as PSPath, PSParentPath, PSChildName, and PSProvider.

現在の場所を参照するために、*.* 表記を使用できます。You can use the *.* notation for referring to the current location. Set-Location を使用して、まず CurrentVersion レジストリのコンテナーに変更します。You can use Set-Location to change to the CurrentVersion registry container first:

Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

または、Set-Location と共に組み込みの HKLM PSDrive を使用できます。Alternatively, you can use the built-in HKLM PSDrive with Set-Location:

Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion

次に、現在の場所に対して *.* 表記を使用して、完全パスを指定することなくプロパティを一覧表示できます。You can then use the *.* notation for the current location to list the properties without specifying a full path:

Get-ItemProperty -Path .
...
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
...

パスの展開は、ファイル システム内の場合と同様に機能します。そのため、この場所から Get-ItemProperty -Path ..\Help を使って HKLM:\SOFTWARE\Microsoft\Windows\HelpItemProperty の一覧を取得できます。Path expansion works the same as it does within the file system, so from this location you can get the ItemProperty listing for HKLM:\SOFTWARE\Microsoft\Windows\Help by using Get-ItemProperty -Path ..\Help.

1 つのレジストリ エントリの取得Getting a Single Registry Entry

レジストリ キーの特定のエントリを取得する場合は、いくつかの可能なアプローチのいずれかを使用できます。If you want to retrieve a specific entry in a registry key, you can use one of several possible approaches. この例では、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersionDevicePath の値を検索します。This example finds the value of DevicePath in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

Get-ItemProperty を使用する場合、Path パラメーターを使用してキーの名前を指定し、Name パラメーターを使用して DevicePath のエントリの名前を指定します。Using Get-ItemProperty, use the Path parameter to specify the name of the key, and the Name parameter to specify the name of the DevicePath entry.

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

このコマンドは、標準の Windows PowerShell のプロパティと DevicePath プロパティを返します。This command returns the standard Windows PowerShell properties as well as the DevicePath property.

注意

Get-ItemProperty には FilterIncludeExclude パラメーターが含まれていますが、これらはプロパティ名でフィルター処理するためには使えません。Although Get-ItemProperty has Filter, Include, and Exclude parameters, they cannot be used to filter by property name. これらのパラメーターはレジストリ キー (項目のパス) を参照するものであり、レジストリ エントリ (項目のプロパティ) を参照しているのではありません。These parameters refer to registry keys, which are item paths and not registry entries, which are item properties.

別のオプションとして、Reg.exe コマンド ライン ツールを使用することもできます。Another option is to use the Reg.exe command line tool. reg.exe のヘルプを表示するには、コマンド プロンプトで reg.exe /? と入力します。For help with reg.exe, type reg.exe /? at a command prompt. DevicePath エントリを検索するには、次のコマンドに示すように reg.exe を使用します。To find the DevicePath entry, use reg.exe as shown in the following command:

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 オブジェクトを使っていくつかのレジストリ エントリを検索することもできますが、大きなバイナリ データや、"\" のような文字を含むレジストリ エントリ名を使う場合、この方法は機能しません。You can also use the WshShell COM object as well to find some registry entries, although this method does not work with large binary data or with registry entry names that include characters such as "\"). プロパティ名を区切り記号 \ と共に項目のパスに追加します。Append the property name to the item path with a \ separator:

(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

1 つのレジストリ エントリの設定Setting a Single Registry Entry

レジストリ キーの特定のエントリを変更する場合は、いくつかある可能なアプローチのいずれかを使用できます。If you want to change a specific entry in a registry key, you can use one of several possible approaches. この例では、HKEY_CURRENT_USER\Environment 下の Path エントリを変更します。This example modifies the Path entry under HKEY_CURRENT_USER\Environment. Path エントリでは、実行可能ファイルを検索する場所を指定します。The Path entry specifies where to find executable files.

  1. Get-ItemProperty を使って Path エントリの現在の値を取得します。Retrieve the current value of the Path entry using Get-ItemProperty.
  2. ; で区切りながら新しい値を追加します。Add the new value, separating it with a ;.
  3. 指定したキー、エントリ名、およびレジストリ エントリを変更する値と共に Set-ItemProperty を使います。Use Set-ItemProperty with the specified key, entry name, and value to modify the registry entry.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath

注意

Set-ItemProperty には FilterIncludeExclude パラメーターが含まれていますが、これらはプロパティ名でフィルター処理するためには使えません。Although Set-ItemProperty has Filter, Include, and Exclude parameters, they cannot be used to filter by property name. これらのパラメーターはレジストリ キー (項目のパス) を参照し、レジストリ エントリ (項目のプロパティ) を参照するのではありません。These parameters refer to registry keys—which are item paths—and not registry entries—which are item properties.

別のオプションとして、Reg.exe コマンド ライン ツールを使用することもできます。Another option is to use the Reg.exe command line tool. reg.exe のヘルプを表示するには、コマンド プロンプトで「reg.exe /? 」と入力します。For help with reg.exe, type reg.exe /? at a command prompt.at a command prompt.

次の例では、上記の例で追加したパスを削除することで Path エントリを変更します。The following example changes the Path entry by removing the path added in the example above. reg query から返された文字列を解析しなくて済むようにするため、Get-ItemProperty を引き続き使って現在の値を取得します。Get-ItemProperty is still used to retrieve the current value to avoid having to parse the string returned from reg query. Path エントリに追加された最後のパスを取得するために、SubString および LastIndexOf メソッドを使います。The SubString and LastIndexOf methods are used to retrieve the last path added to the Path entry.

$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';'))
reg add HKCU\Environment /v Path /d $newpath /f
The operation completed successfully.

新しいレジストリ エントリの作成Creating New Registry Entries

"PowerShellPath" という名前の新しいエントリを CurrentVersion キーに追加するには、キーのパス、エントリ名、エントリの値と共に New-ItemProperty を使用します。To add a new entry named "PowerShellPath" to the CurrentVersion key, use New-ItemProperty with the path to the key, the entry name, and the value of the entry. この例では、Windows PowerShell の変数 $PSHome の値を取得します。これには、Windows PowerShell のインストール ディレクトリへのパスが格納されます。For this example, we will take the value of the Windows PowerShell variable $PSHome, which stores the path to the installation directory for Windows PowerShell.

キーに新しいエントリを追加するには、次のコマンドを使用します。このコマンドは、新しいエントリに関する情報も返します。You can add the new entry to the key by using the following command, and the command also returns information about the new entry:

New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
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
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

PropertyType は、次の表の Microsoft.Win32.RegistryValueKind 列挙体のメンバーの名前にする必要があります。The PropertyType must be the name of a Microsoft.Win32.RegistryValueKind enumeration member from the following table:

PropertyType の値PropertyType Value 説明Meaning
BinaryBinary Binary DataBinary data
DWordDWord 有効な UInt32 である数字A number that is a valid UInt32
ExpandStringExpandString 動的に展開される環境変数を含むことができる文字列A string that can contain environment variables that are dynamically expanded
MultiStringMultiString 複数行文字列A multiline string
StringString 任意の文字列値Any string value
QWordQWord 8 バイトのバイナリ データ8 bytes of binary data

注意

Path パラメーターに値の配列を指定して、レジストリ エントリを複数の場所に追加できます。You can add a registry entry to multiple locations by specifying an array of values for the Path parameter:

New-ItemProperty -Name PowerShellPath -PropertyType String -Value $PSHome `
  -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion

また、Force パラメーターを任意の New-ItemProperty コマンドに追加して、既存のレジストリ エントリの値を上書きすることもできます。You can also overwrite a pre-existing registry entry value by adding the Force parameter to any New-ItemProperty command.

レジストリ エントリの名前変更Renaming Registry Entries

PowerShellPath エントリの名前を "PSHome" に変更するには、Rename-ItemProperty を使用します。To rename the PowerShellPath entry to "PSHome," use Rename-ItemProperty:

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome

名前が変更された値を表示するには、PassThru パラメーターをコマンドに追加します。To display the renamed value, add the PassThru parameter to the command.

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru

レジストリ エントリの削除Deleting Registry Entries

PSHome と PowerShellPath の両方のレジストリ エントリを削除するには、Remove-ItemProperty を使用します。To delete both the PSHome and PowerShellPath registry entries, use Remove-ItemProperty:

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath