PowerShellでレジストリを編集する方法
はじめに
PowerShellからレジストリを編集する方法のメモです。
※ レジストリの編集を誤るとWindowsが起動しなくなる場合もありますので、実行する場合は自己責任でお願いいたします。
キーの記載方法
PowerShellではルートキーを「HKEY_CURRENT_USER」→「HKCU:」のように変換して記載します。
| ルートキー | キーの記載 |
|---|---|
HKEY_CLASSES_ROOT |
HKCR: |
HKEY_CURRENT_USER |
HKCU: |
HKEY_LOCAL_MACHINE |
HKLM: |
HKEY_USERS |
HKU: |
HKEY_CURRENT_CONFIG |
HKCC: |
「HKU:」「HKCR:」「HKCC:」はデフォルトで未割り当てのため、使用する際は下記コマンドで割り当てを行います。
New-PSDrive -Name HKCC -PSProvider Registry -Root HKEY_CURRENT_CONFIG
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS
エントリの種類
-PropertyTypeでエントリの種類を指定する際は以下を使用します。
| エントリの種類 | -PropertyTypeの指定 | 備考 |
|---|---|---|
| 文字列値 | String |
REG_SZ |
| バイナリ値 | Binary |
REG_BINARY |
| DWORD(32ビット)値 | DWord |
REG_DWORD |
| QWORD(64ビット)値 | QWord |
REG_QWORD |
| 複数行文字列値 | MultiString |
REG_MULTI_SZ |
| 展開可能な文字列値 | ExpandString |
REG_EXPAND_SZ |
主な処理コマンド一覧
| 処理 | コマンド |
|---|---|
| キーの作成 | New-Item ${path} |
| キーの取得 | Get-ItemProperty ${path} |
| キー名の変更 | Rename-Item ${path} -NewName ${newName} |
| キーの削除 | Remove-Item ${path} |
| エントリの作成 | New-ItemProperty ${path} -Name ${name} -PropertyType ${type}-Value ${value} |
| エントリの取得 | Get-ItemProperty ${path} -Name ${name} |
| エントリ名の変更 | Rename-ItemProperty ${path} -Name ${name} -NewName ${newName} |
| エントリ値の変更 | Set-ItemProperty ${path} -Name ${name} -Value ${value} |
| エントリの削除 | Remove-ItemProperty ${path} -Name ${name} |
実行例
キーの作成
キーの作成はNew-Itemを使用します。
# 「HKEY_CURRENT_USER\TEST」を作成
New-Item 'HKCU:\TEST'
エントリの作成
エントリの作成はNew-ItemPropertyを使用します。
# 「HKEY_CURRENT_USER\TEST」にエントリを追加
$path = 'HKCU:\TEST'
# 文字列値(String)の作成
New-ItemProperty $path -Name "data1" -PropertyType "String" -Value "Sample"
# バイナリ値はバイナリの配列を使用する
$value = @()
$value += [byte]0x61
$value += [byte]0x62
$value += [byte]0x63
New-ItemProperty $path -Name "data2" -PropertyType "Binary" -Value $value
# 複数行文字列値は文字列の配列を使用する
$value = "aaa", "bbb", "ccc"
New-ItemProperty $path -Name "data3" -PropertyType "MultiString" -Value $value
実行結果
エントリ名の修正、エントリ値の修正
エントリ名の修正はRename-ItemProperty、エントリ値の修正の修正はSet-ItemPropertyを使用します。
$path = 'HKCU:\TEST'
# エントリ名の修正
Rename-ItemProperty $path -Name "data1" -NewName "data100"
# エントリ値の修正
Set-ItemProperty $path -Name "data3" -Value ("ddd", "eee", "fff")
実行結果
エントリの削除
エントリ値の削除はRemove-ItemPropertyを使用します。
$path = 'HKCU:\TEST'
# エントリ値の削除
Remove-ItemProperty $path -Name "data2"
実行結果
エントリの追加について
キーが存在しない場合、エントリの追加はエラーとなります。
$path = 'HKCU:\TEST\AAA\BBB\CCC'
New-ItemProperty $path -Name "data1" -PropertyType "String" -Value "Sample"
New-ItemProperty : パス 'HKCU:\TEST\AAA\BBB\CCC' が存在しないため検出できません。
キーが存在しなくてもエントリを追加したい場合は独自に関数を作成する必要があります。
|
|
$path = 'HKCU:\TEST\AAA\BBB\CCC'
Set-Registry $path "data1" "String" "Sample"