レジストリプロバイダーでレジストリキー情報を取得
前回は、プロバイダーを移動する方法や、キーの表示方法を紹介しました。前回に引き続き、レジストリを操作する基本的なコマンドレットを紹介します。
今回は、プログラミングをするわけではないので、通常のPowerShellコマンドラインを使用します。
まず、主キー、HKEY_CURRENT_USER以下の、\Software\Microsoftキーから見てみます。Set-Location(省略形sl)で、カレントディレクトリ(フォルダあるいはロケーション)を移動します。次に、Get-ChildItem(省略形gci)を実行してサブキーを確認します。
sl HKCU:\Software\Microsoft
gci
※ Set-Locationの詳細は前回を参照してください。
※ レジストリプロバイダでパスを入力するときも、ファイルシステムでパスを入力するときと同様に、途中まで入力した後にTabキーを押して入力補完できます。たとえば、Microsoftというキー名をすべて入力しなくても、最初の数文字...miなど...を入力してTabキーをおせば、自動的にMicrosoftと補完します。
ここで、念のため、レジストリエディタ(regeditコマンド)でHKCU:\Software\Microsoftのサブキーを確認してみましょう。
なお、レジストリキーの情報を得るにはGet-Item(省略形gi)とGet-ChildItemの2つのコマンドレットを使うのが一般的ですが、Get-Itemは指定したレジストリキーの情報を、Get-ChildItemは指定したレジストリキーのサブキーの情報を取得します。
試しに、レジストリエディタで、カレントキー(HKCU:\Software\Microsoft)のサブキーであるDirect3Dを確認してみます。Drect3Dのサブキーとして、MostRecentApplicationキーがあることがわかります。
カレントキーのサブキー、Direct3Dの情報を取得するには次のように実行します。
gi Direct3D
次に、Direct3Dのサブキーの情報を表示するには、Get-ChildItemを実行します。
gci Direct3D
エントリ情報を取得
一方、レジストリキーそのものではなく、レジストリキーに保存されたエントリを取得するためには、Get-ItemProperty(省略形gp)を使用します。
たとえば、HKCU:\Software\Microsoft\Direct3D\MostRecentApplicationキーには、Nameという文字列型エントリがあり「DllHost.exe」という文字列が保存されています。
PowerShelldでは、Get-ItemPropertyで取得します。そのまま情報を表示するだけでなく、変数に代入して、プロパティでエントリのデータを取り出すこともできます。
sl Direct3D
gp Direct3D\MostRecentApplication
$p = gp Direct3D\MostRecentApplication
$p.PSChildName
$p.Name
なお、レジストリエディタで「(既定)」と表示されているエントリにについては、プロパティ名が「(default)」となります。プロパティ名に()が含まれているため、PowerShellで指定するときには" "または' 'でくくる必要があります。
※ 英語版Windowsでは、レジストリキーの既定のエントリは「(既定)」ではなく「(default)」と表示されます。つまり、もともとのエントリ名は「(default)」であり、日本語版ではそれを「(既定)」と表示しているだけだと思われます。
キーの存在を確認する
特定のレジストリキーが存在するかどうかを確認するには、ファイルシステムでファイルやフォルダの存在を確認するときと同じ、Test-Pathコマンドレットを使用します。指定したパスが存在すればTrue(真)、存在しなければFalse(偽)を返します。
Test-Path MostRecentApplication
Test-Path Most
をそれぞれ実行してみます。
キーやエントリを作成する
PowerShellでは、ファイルシステムを操作してファイルやフォルダを作成するとき、New-Item(省略形ni)を使用します。同様に、レジストリを操作するときも、New-Itemで新しいキーを作成できます。
たとえば、HKCU:のルートに新しいレジストリキー、Testを作成するには、以下のように実行します。
sl HKCU:\
ni Test
キーに対してエントリを作成するときは、New-ItemPropertyを作成します。New-ItemPropertyの一般的な仕様スタイルは次の通りです。
New-ItemProperty エントリを作成するキーのパス エントリ名 -PropertyType エントリの型 -Value エントリの値
たとえば、レジストリキーTestに、文字列型のエントリ「PCName」を作成し、データとして「Prime64」を保存するには、以下のように実行します。
New-ItemProperty Test PCName -PropertyType String -Value "Prime64"
パスの指定は、カレントパス直下であればキー名だけを記述してかまいません。カレントパス以外のパスであれば、HKCU:\Test のようにパスを指定します。
-PropertyTypeに指定するエントリの型は次の通りです。
指定するキーワード | レジストリエディタでの表示 | 説明 |
---|---|---|
Binary | REG_BINARY | バイナリデータ(文字列以外のデータ) |
DWord | REG_DWORD | 4バイト長の整数データ |
ExpandString | REG_EXPAND_SZ | 環境変数(%TEMP%など)を含む文字列 |
MultiString | REG_MULTI_SZ | 複数の文字列 |
QWord | REG_QWORD | 8バイト長の整数データ |
String | REG_SZ | 文字列 |
レジストリキーの大文字と小文字
PowerShellは基本的に大文字と小文字を区別しません。New-Itemコマンドレットでレジストリキーを作成すると、コマンドラインで大文字を使っても、作成するレジストリキー名はすべて小文字になります。
意図して大文字小文字を使い分けたレジストリキーを作成したいときは、作成するキー名を" "でくくってください。New-Item "Test" のように実行します。
キーやプロパティを削除する
キーやプロパティを削除するときには、Remove-Item(省略形ri)あるいはRemove-ItemPropertyを使用します。
たとえば、レジストリキー Test を削除するには、次のように実行します。
ri Test
以上で、主要なレジストリ操作のコマンドレットを紹介しました。
これらを組み合わせて、次回から、簡単なスクリプトプログラムを作成します。特定のレジストリキーが存在するかどうかを検査し、そのレジストリキーが存在しなければ、新規にレジストリキーとエントリを作成するプログラムです。