Home > Windows にまつわる e.t.c.

PowerShell でレジストリ追加/更新


Windows Serverを扱っていると、レジストリ設定をする事が良くあります。

REG コマンドで操作しても良いのですが、なんか呪文ポイので個人的には好きじゃなかったり...
やはりここは PowerShell ですよねww

よく使うので、レジストリの追加/更新を PowerShell 関数にしました。

# ------------------------------
# $RegKeyTypeに設定する値
# "String"
# "ExpandString"
# "Binary"
# "DWord"
# "MultiString"
# "QWord"
# ------------------------------
# $RegPath で指定するルートキー
# HKEY_LOCAL_MACHINE → HKLM:
# HKEY_CURRENT_USER → HKCU:
# HKEY_CURRENT_CONFIG → HKCC:
# HKEY_CLASSES_ROOT → HKCR:
# HKEY_USERS → HKU:
# ------------------------------
# 使用例
# $RegPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
# $RegKey = "HideFileExt"
# $RegKeyType = "DWord"
# $RegKeyValue = 0
# RegSet $RegPath $RegKey $RegKeyType $RegKeyValue
# ------------------------------
# MultiString 使うときはこんな感じで値を指定
# $RegKeyType = "MultiString"
# $RegKeyValue = "aaaaaa", "bbbb", "cccc"
# ------------------------------
# Binary 使うときはこんな感じで値を指定
# $RegKeyType = "Binary"
# $RegKeyValue = @()
# $RegKeyValue += [byte]0x00
# $RegKeyValue += [byte]0x15
# ------------------------------

 

# default で HKLM: HKCU: 以外のルートキーが割り当てされていないので割り当てておきます
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

 

### レジストリ追加/更新
function RegSet( $RegPath, $RegKey, $RegKeyType, $RegKeyValue ){
    # レジストリそのものの有無確認
    $Elements = $RegPath -split "\\"
    $RegPath = ""
    $FirstLoop = $True
    foreach ($Element in $Elements ){
        if($FirstLoop){
            $FirstLoop = $False
        }
        else{
            $RegPath += "\"
        }
        $RegPath += $Element
        if( -not (test-path $RegPath) ){
            echo "Add Registry : $RegPath"
            md $RegPath
        }
    }

    # Key有無確認
    $Result = Get-ItemProperty $RegPath -name $RegKey -ErrorAction SilentlyContinue
    # キーがあった時
    if( $Result -ne $null ){
        Set-ItemProperty $RegPath -name $RegKey -Value $RegKeyValue
    }
    # キーが無かった時
    else{
        # キーを追加する
        New-ItemProperty $RegPath -name $RegKey -PropertyType $RegKeyType -Value $RegKeyValue
    }
    Get-ItemProperty $RegPath -name $RegKey
}

 

関連情報

PowerShell でレジストリ読み取り

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.