PowerShellでレジストリを操作する:キーと値の取得・変更・作成・削除
Windowsのレジストリ操作といえば、レジストリ エディター (regedit.exe) やコマンドライン ユーティリティの reg.exe) を思い浮かべる方が多いかもしれません。しかし、PowerShell を使えば、レジストリ キーや値の作成、変更、削除、検索、さらにはリモート コンピューターのレジストリへのアクセスまで、管理者向けの強力なツールセットとして活用できます。
PowerShell でレジストリをファイル システムのように操作する
PowerShell でレジストリを扱う感覚は、ローカル ディスク上のファイルやフォルダーを操作するのとよく似ています。異なるのは、レジストリ キーが「フォルダー」に、レジストリ値(パラメーター)が「ファイルのプロパティ」に相当する点です。
まず、利用可能なドライブ(PowerShell ドライブ)の一覧を表示してみましょう:
Get-PSDrive

ドライブ文字が割り当てられた通常のドライブのほか、レジストリ プロバイダー を通じて HKCU (HKEY_CURRENT_USER) と HKLM (HKEY_LOCAL_MACHINE) という特殊なドライブが見えます。これらを使って、通常のディレクトリと同じようにレジストリ ツリーを移動できます。HKLM:\ と HKCU:\ で各ハイブのルートにアクセスします。
cd HKLM:\
Dir -ErrorAction SilentlyContinue

こうして、ファイル/フォルダー管理用のコマンドレットをそのままレジストリ キーと値の操作に流用できます。
レジストリ キー自体を操作するには xxx-Item 系コマンドレットを使います:
Get-Item– レジストリ キーを取得New-Item– 新しいレジストリ キーを作成Remove-Item– レジストリ キーを削除
一方、レジストリ値(パラメーター)はキーのプロパティとして扱われるため、xxx-ItemProperty 系コマンドレットで管理します:
Get-ItemProperty– レジストリ値を取得Set-ItemProperty– レジストリ値を変更New-ItemProperty– 新しいレジストリ値を作成Rename-ItemProperty– レジストリ値の名前を変更Remove-ItemProperty– レジストリ値を削除
特定のレジストリ キーへ移動するには、例えば自動ドライバー更新の設定を持つキーへ以下のようにアクセスします:
cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
# または
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching
PowerShell でレジストリ値を取得する
レジストリ キーに格納される値は、入れ子になったオブジェクトではなく、そのキー自体のプロパティです。したがって、1 つのキーに複数の値を持たせることができます。
カレント キーの内容を一覧表示するには:
dir
# または
Get-ChildItem
このコマンドではサブキーの情報は表示されますが、カレント キー直下の値(プロパティ)である SearchOrderConfig は表示されません。
キー自体のプロパティ(値)を取得するには Get-Item を使います:
Get-Item .
# またはフル パスで
Get-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching

この例では、DriverSearching キーに SearchOrderConfig という値(値は 1)が 1 つだけ存在していることがわかります。
値だけをピンポイントで取得するには Get-ItemProperty を使います:
$DriverUpdate = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching'
$DriverUpdate.SearchOrderConfig

これにより、SearchOrderConfig の値が 1 であることが確認できました。
PowerShell でレジストリ値を変更する
値を変更するには Set-ItemProperty を使用します。以下は SearchOrderConfig を 0 に変更する例です:
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig -Value 0
変更が反映されたか確認します:
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig

新しいレジストリ キーまたは値を作成する
新しいキーを作成するには New-Item を使います。ここでは HKCU:\Control Panel\Desktop 配下に NewKey というキーを作成します:
$HKCU_Desktop = "HKCU:\Control Panel\Desktop"
New-Item -Path $HKCU_Desktop -Name NewKey
続けて、作成したキーの中に新しい値を追加します。型 REG_SZ(文字列)で、名前 SuperParamString、値 filetmp1.txt の値を作成する例:
New-ItemProperty -Path $HKCU_Desktop\NewKey -Name "SuperParamString" -Value "filetmp1.txt" -PropertyType "String"
指定可能なデータ型(PropertyType)は以下の通りです:
- String (REG_SZ)
- ExpandString (REG_EXPAND_SZ)
- MultiString (REG_MULTI_SZ)
- Binary (REG_BINARY)
- DWord (REG_DWORD)
- Qword (REG_QWORD)
- Unknown (サポートされていない型)

レジストリ キーの存在を確認する
特定のキーが存在するかどうかを調べるには Test-Path を使います:
Test-Path 'HKCU:\Control Panel\Desktop\NewKey'
以下のスクリプトは、指定した値が存在しなければ新規作成する例です:
$regkey = 'HKCU:\Control Panel\Desktop\NewKey'
$regparam = 'testparameter'
if (Get-ItemProperty -Path $regkey -Name $regparam -ErrorAction Ignore) {
Write-Host 'The registry entry already exists'
} else {
New-ItemProperty -Path $regkey -Name $regparam -Value "woshub_test" -PropertyType "String"
}
Copy-Item を使えば、キーごと別の場所へコピーできます(サブキーごとコピーするには -Recurse を付けます):
$source = 'HKLM:\SOFTWARE\7-zip\'
$dest = 'HKLM:\SOFTWARE\backup'
Copy-Item -Path $source -Destination $dest -Recurse
レジストリ キーまたは値を削除する
値だけを削除するには Remove-ItemProperty を使います。先ほど作成した SuperParamString を削除する例:
$HKCU_Desktop = "HKCU:\Control Panel\Desktop"
Remove-ItemProperty -Path $HKCU_Desktop\NewKey -Name "SuperParamString"
キーごと(サブキーを含む全内容)削除するには Remove-Item に -Recurse を付けます:
Remove-Item -Path $HKCU_Desktop\NewKey -Recurse
注意: -Recurse スイッチを指定すると、すべてのサブキーが再帰的に削除されます。
キー自体は残して中身だけ空にする場合:
Remove-Item -Path $HKCU_Desktop\NewKey\* -Recurse
レジストリ キーまたは値の名前を変更する
値の名前を変更するには Rename-ItemProperty を使います:
Rename-ItemProperty -Path 'HKCU:\Control Panel\Desktop\NewKey' -Name "SuperParamString" -NewName "OldParamString"
キーの名前を変更するには Rename-Item を使います:
Rename-Item -Path 'HKCU:\Control Panel\Desktop\NewKey' -NewName OldKey
PowerShell でレジストリを検索する
PowerShell を使えばレジストリ内を柔軟に検索できます。以下は HKCU:\Control Panel\Desktop 配下で、名前に dpi を含む値を探す例です:
$Path = (Get-ItemProperty 'HKCU:\Control Panel\Desktop')
$Path.PSObject.Properties | ForEach-Object {
If ($_.Name -like '*dpi*') {
Write-Host $_.Name ' = ' $_.Value
}
}
特定の名前を持つキーを再帰的に検索する例(ここでは woshub を含むキー):
Get-ChildItem -Path HKLM:\ -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.Name -like "*woshub*" }
PowerShell でレジストリ キーのアクセス権を設定する
現在のアクセス権(ACL)を取得するには Get-Acl を使います(このコマンドレットは NTFS のアクセス権管理にも使えます):
$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
$rights.Access.IdentityReference

以下の例では、組み込みの「Users」グループに対して当該キーへの書き込み権限を付与しています:
# 現在の ACL を取得
$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
# 対象のユーザー/グループを指定
$idRef = [System.Security.Principal.NTAccount]"BuiltIn\Users"
# 付与する権限(キーへの書き込み)
$regRights = [System.Security.AccessControl.RegistryRights]::WriteKey
# 継承設定
$inhFlags = [System.Security.AccessControl.InheritanceFlags]::None
$prFlags = [System.Security.AccessControl.PropagationFlags]::None
# アクセス種別(Allow)
$acType = [System.Security.AccessControl.AccessControlType]::Allow
# アクセス ルールを作成
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)
# 現在の ACL にルールを追加
$rights.AddAccessRule($rule)
# 新しい ACL を適用
$rights | Set-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'

ACL に「Users」グループが追加されたことが確認できます。
リモート コンピューターのレジストリ値を取得する
PowerShell ではリモート コンピューターのレジストリにもアクセスできます。主に 2 つの方法があります。
方法 1: WinRM (Invoke-Command / Enter-PSSession) を使用
リモート セッション経由でコマンドを実行します:
Invoke-Command -ComputerName srv-fs1 -ScriptBlock { Get-ItemProperty -Path 'HKLM:\System\Setup' -Name WorkingDirectory }
方法 2: .NET のリモート レジストリ接続を使用
リモート レジストリ サービス (RemoteRegistry) が有効な場合に利用できます:
$Server = "lon-fs1"
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)
$RegKey = $Reg.OpenSubKey("System\Setup")
$RegValue = $RegKey.GetValue("WorkingDirectory")
ヒント: ドメイン参加済みの複数のコンピューターで同じレジストリ設定を展開する場合は、グループ ポリシー (GPO) を利用するのがより効率的です。
以上、PowerShell を用いた Windows レジストリの典型的な操作例を紹介しました。これらを自動化スクリプトに組み込んで、効率的なシステム管理にお役立てください。
-
Macのキーボードのキーを外す・掃除・交換する方法とキー配列の変更手順
iMac、Mac、MacBookのキーボードからキーを取り外し、掃除・修理・交換する方法を、初心者にもわかりやすく解説します。さらに、macOSの設定や無料ツールを使ってキーの機能を入れ替える(リマップする)方法もご紹介します。 「Macのキーボードからキーを外して、後で元に戻すにはどうすればいいですか?コーヒーをこぼしてしまったので、中を掃除したいのです。せっかくなので、汚れたり傷んだりしたキーも新しいものに交換したいと思っています。」 Macのキーの移動や交換は、大きく分けて2つのケースがあります。1つ目は、キーボードのハードウェアとしてキーを物理的に移動・交換する場合です。例えば、US配
-
Windowsレジストリエディターでキーと値を追加・変更・削除する方法【初心者向け完全ガイド】
レジストリエディターは、Windowsパソコンの背骨とも呼ばれる重要な存在です。インストールされたプログラムやハードウェアに関する情報、設定、オプションなど、さまざまな値が格納されています。一般ユーザーがレジストリエディターを直接操作することはほとんどありませんが、Windowsの高度な設定に精通している上級者であれば、その扱い方を知っているはずです。 エラーを修正する際に、レジストリエディターでサブキーや値の追加・削除が必要になることがあります。しかし、「レジストリエディターでの変更を求められたら少し緊張する」という方は多いのではないでしょうか。「わずかなミスがシステム全体を壊し、パソコンを