PowerShellでレジストリの読み書き¶
レジストリの構造¶
要素 | ファイル構造で言えば | 例 |
---|---|---|
ルートキー | ドライブ名に相当 | HKEY_LOCAL_MACHINE |
キー | ディレクトリ(フォルダ)に相当 | HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit |
値の名前(エントリ) | ファイルに相当 | CurrentVersion |
値 | ファイルの中身に相当 | 1.8 |
PowerShellメモ¶
- レジストリキーの大文字・小文字はPowerShellは区別しない(すべて小文字になる)
→ 大文字小文字を明示的に指定したいときは、キーの名前をダブルクォートで囲む
レジストリの読み出し¶
レジストリの様子を見る(Get-ItemProperty)¶
PowerShell の Get-ItemPropertyで、キーを指定します。値の名前を指定するときは、キーの指定に追加して-Nameオプションで値の名前を指定します。キーの指定に値の名前までつなげるとエラーになります。
PS > Get-ItemProperty -Path "HKLM:\Software\JavaSoft\Java Development Kit" CurrentVersion : 1.8 PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\JavaSoft PSChildName : Java Development Kit PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry
名前まで指定する場合
PS > Get-ItemProperty -Path "HKLM:\Software\JavaSoft\Java Development Kit" -Name CurrentVersion
- 値の名前が1つしかない場合は、-Nameを指定してもしなくても同じ表示となりました
キーと値の名前から値を取り出す¶
PS > $jdk = Get-ItemProperty -Path "HKLM:\Software\JavaSoft\Java Development Kit" PS > $jdk.CurrentVersion 1.8
と、Get-ItemPropertyにキーを指定して結果をいったん変数に結果を置き、その変数に値の名前をプロパティとして指定して値を得ることができます。
PS > (Get-ItemProperty -Path "HKLM:\Software\JavaSoft\Java Development Kit").CurrentVersion 1.8
キーの有無を判定する¶
PS > Test-Path "HKLM:\Software\JavaSoft\Java Development Kit" True
とすることでも値が取れました。
レジストリの書き込み¶
レジストリのキーに新しい値(エントリ)を追加¶
PowerShell の New-ItemPropertyで、-Pathオプションで指定したキーに、-Nameオプションで指定したエントリ(値の名前)を追加し、-PropertyTypeで値の型を指定し、-Valueオプションで指定した値を設定します。
PS > New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\ ` -Name DisabledComponents -PropertyType DWord -Value 0xffffffff
既に存在する値の名前(エントリ)に対してNew-ItemPropertyを実行するとエラーになります。New-ItemProperty : このプロパティは既に存在します。
そのときは、-Forceオプションを指定してNew-ItemPropertyを実行します。