コマンドでレジストリを操作する方法

コマンドでレジストリを操作する方法。

Windowsでは、システムやアプリケーションの設定情報などがレジストリと呼ばれるデータベースに保存されており、Windowsやアプリの設定を変更するときにレジストリに保存されいるデータを編集して設定変更しなければならないケースがあります。

Windowsでレジストリを編集する際のもっとも一般的な方法は、GUIベースの「レジストリエディター(regedit.exe)」を使った方法で、エントリの追加や変更、インポート、エクスポートといったレジストリ操作全般をマウスとキーボードを使って行うことができます。

ですが、レジストリエディターでの操作は視覚的には分かりやすいものの、同じ操作を繰り返すような場合や、同じ操作を複数のパソコンで行うような場合は、少々面倒です。そのようなときは、WindowsコマンドやPowerShellといったコマンドを使ってレジストリを操作するのが便利です。

そこでここでは、レジストリエディターやコマンドを使ってレジストリを操作する基本的な方法を解説します。

Windowsコマンドを使った方法

Windowsコマンドを使ってレジストリ操作を行う場合は「REG」コマンドを利用します。REGコマンドには、エントリの追加/削除/変更/エクスポート/インポートするといった操作ごとにサブコマンドが用意されています。

主なサブコマンドは、以下のとおりです。

  • REG QUERY - 既存のレジストリ情報を表示
  • REG ADD - レジストリキーや値の追加や更新
  • REG DELETE - レジストリキーや値の削除
  • REG EXPORT - レジストリキーや値を.regファイルへ書き出し
  • REG IMPORT - REG EXPORTで書き出されたレジストリキーや値の書き戻し

REG QUERY

既存のレジストリキーや値を確認したいときは、以下のようにコマンドを実行します。

> reg query HKCU\Environment /v my-var

REG ADD

新しいレジストリキーや値を追加/変更するときは、以下のようにコマンドを実行します。

> reg add HKCU\Environment /v my-var /t reg_sz /d "Hello"

コマンドを実行すると確認メッセージが表示され「y」と入力することで処理が実行されます。(「/f」オプションを付けると、確認なしで処理が実行されます。)

REG DELETE

既存のレジストリ値を削除するときは、以下のようにコマンドを実行します。

> reg delete HKCU\Environment /v my-var

コマンドを実行すると確認メッセージが表示され「y」と入力することで処理が実行されます。(「/f」オプションを付けると、確認なしで処理が実行されます。)

REG EXPORT、REG IMPORT

登録されているレジストリ情報をエクスポート(バックアップ)したり、インポート(復元)するときは、REG EXPORTやREG IMPORTコマンドを使用します。

REG EXPORTやREG IMPORTコマンドの詳しい使い方は、以下の記事をご覧ください。

Windowsでレジストリをバックアップ・復元する方法
Windowsでレジストリをバックアップ・復元する方法
Windows 10や11でレジストリ情報をバックアップ・復元する方法として、レジストリエディターやREGコマンドを使った方法を紹介します。

PowerShellコマンドレットを使った方法

PowerShellコマンドレットを使ってレジストリ操作を行うときに使用する主なコマンドレットは、以下のとおりです。

  • Get-ItemProperty - 既存のレジストリ情報を表示
  • Set-ItemProperty - レジストリ値の更新
  • New-Item - レジストリキーの追加
  • New-ItemProperty - レジストリ値の追加
  • Remove-ItemProperty - レジストリキーや値の削除

Get-ItemProperty

既存のレジストリ情報を取得するときは、Get-ItemPropertyコマンドレットを使って、以下のようにコマンドを実行します。

PS> Get-ItemProperty -Path "HKCU:\Environment"

特定のプロパティ情報だけを取得したいときは、以下のようにコマンドを実行します。

PS> Get-ItemProperty -Path "HKCU:\Environment" -Name "my-var"

Set-ItemProperty

登録されているレジストリ情報を更新するときは、Set-ItemPropertyコマンドレットを使って、以下のようにコマンドを実行します。

PS> Set-ItemProperty "HKCU:\Environment" -name "my-var" -value "See you" -Force

なお、コマンドの最後に「-whatIf」オプションを付加すれば、レジストリの変更やファイルの削除など元に戻せない操作を行う場合に、いきなり実行するのではなく処理内容を事前に確認することができるため、より安全にコマンドを実行できます。

New-Item

新しいレジストリキーを追加するときは、まずキーが存在しているかを確認し、キーが存在していない場合には以下のコマンドでまずキーを作成します。

PS> if (!(Test-Path "HKCU:\Environment")) { New-Item -Path "HKCU:\Environment" -Force }

New-ItemProperty

新しいレジストリ値を追加するときは、New-ItemPropertyコマンドレットを使って、以下のようにコマンドを実行します。

PS> New-ItemProperty -Path "HKCU:\Environment" -Name "new-var" -PropertyType String -Value "Hello" -Force

Remove-ItemProperty

既存のレジストリ値を削除するときは、Remove-ItemPropertyコマンドレットを使って、以下のようにコマンドを実行します。

PS> Remove-ItemProperty -Path "HKCU:\Environment" -name "my-var"

関数化がおすすめ

PowerShellコマンドレットでレジストリを操作する場合、レジストリキーや値の追加、更新それぞれに異なるコマンドを実行する必要があり、REGコマンドのような手軽さがありません。

そのため、PowerShellコマンドレットでレジストリキーや値を追加したり更新するなら、以下のような関数を作成すれば、REGコマンドライクに実行できます。

# レジストリ設定
function Add-YaReg {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string]$path,

        [Parameter(Mandatory=$true)]
        [string]$name,

        [Parameter(Mandatory=$true)]
        [string]$type,

        [Parameter(Mandatory=$true)]
        [string]$value
    )

    if (!(Test-Path $path)) {
        New-Item -Path $path -Force
        New-ItemProperty -Path $path -Name $name -Value $value -PropertyType $type -Force | Format-List
    } elseif (!(Get-ItemProperty -Path $path -Name $name -ErrorAction SilentlyContinue)){
        New-ItemProperty -Path $path -Name $name -Value $value -PropertyType $type -Force | Format-List
    } else {
        Set-ItemProperty -Path $path -Name $name -Value $value -Passthru -Force | Format-List
    }
}

PS> Add-YaReg -path 'HKCU:\Environment' -name 'new-var' -type String -value 'Hello'

あとがき

レジスト操作は、レジストリエディターを使った方法が一般的ですが、複数のマシンに同じ操作を行うことがあるなら、コマンドでの操作方法を覚えておくと作業効率を格段にアップできます。ご活用あれ。