プロジェクト

全般

プロフィール

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を実行します。

クリップボードから画像を追加 (サイズの上限: 1 GB)