次の方法で共有


レジストリ データの変更

WMI のシステム レジストリ プロバイダーのクラス StdRegProv には、次の操作を行うメソッドがあります。

  • レジストリ キーを作成または削除する。

    CreateKey または DeleteKey を作成します。

  • 名前付きの値 (キーの下にある場合はエントリと呼ばれる) を作成または削除する。

    名前付きの値を作成するには、新しい値の名前と、SetBinaryValueSetDWORDValueSetExpandedStringValueSetMultiStringValue、または SetStringValue を使用します。 名前付きの値を削除するには、DeleteValue を使用します。

  • 名前付きの値を変更する。

    キーの下にある既存の名前付きの値を変更するには、値の名前と Set メソッド (前の箇条書き項目を参照) を使用します。 値を変更するには、値の名前を知っている必要があります。 キーの下にある値の名前がわからない場合は、EnumValues メソッドを使用して名前を取得します。

このトピックでは次のセクションを扱います。

VBScript を使用したレジストリ キーの作成

レジストリはオペレーティング システム、アプリケーション、サービスの中央構成データベースであるため、レジストリ値に変更を書き込む場合やキーを削除する場合は注意が必要です。

注意

HKEY_CURRENT_USER(HKCU)HKEY_CLASSES_ROOT サブキーを監視することはできません。 ハイブが読み込まれるとサブキーの表示、非表示が行われるため、HKEY_USERS の監視は推奨されません。

 

次のコード例は、新しいレジストリ キーとサブキーを作成する方法を示しています。

HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set ObjRegistry = GetObject("winmgmts:{impersonationLevel = impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strPath = "SOFTWARE\MyKey\MySubKey"

Return = objRegistry.CreateKey(HKEY_LOCAL_MACHINE, strPath)

If Return <> 0 Then
    WScript.Echo "The operation failed." & Err.Number
    WScript.Quit
Else
    wScript.Echo "New registry key created" & VBCRLF & "HKLM\SOFTWARE\MYKey\"

End If

$HKEY_LOCAL_MACHINE = 2147483650 
$strComputer = "."
$strPath = "SOFTWARE\MyKey\MySubKey"

$reg = [wmiclass]"\\$strComputer\root\default:StdRegprov"

[void]$reg.CreateKey($HKEY_LOCAL_MACHINE, $strPath)

PowerShell と VBScript を使用した名前付きレジストリ値の作成

次のコード例は、前のスクリプトで作成した HKEY_LOCAL_MACHINESOFTWARE\MyKey\MySubKey\ キーの下に MultiStringValue という名前付きの値を作成する方法を示しています。 スクリプトは StdRegProv.SetMultiStringValue を呼び出して、新しい名前付きの値に文字列値を書き込みます。

const HKEY_LOCAL_MACHINE = &H80000002 
strComputer = "."

Set objRegistry = _
    GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _ 
    & strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\MyKey\MySubKey"
strValueName = "MultiStringValue"
arrStringValues = Array("one", "two","three", "four")

objRegistry.SetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath,_
    strValueName, arrStringValues

' Read the values that were just written
objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath,_
    strValueName, arrStringValues   

For Each strValue in arrStringValues
    WScript.Echo strValue 
Next

$HKEY_LOCAL_MACHINE = 2147483650 
$strComputer = "."
$strPath = "SOFTWARE\MyKey\MySubKey"

$strValueName = "MultiStringValue"
$arrStringValues = @("one", "two","three", "four")

$reg = [wmiclass]"\\$strComputer\root\default:StdRegprov"

[void]$reg.SetMultiStringValue($HKEY_LOCAL_MACHINE, $strKeyPath, $strValueName, $arrStringValues)

$multiValues = $reg.GetMultiStringValue($HKEY_LOCAL_MACHINE, $strKeyPath, $strValueName)
$multiValues.sValue

WMI を使用して、レジストリ キーにアクセス セキュリティを設定することはできません。 ただし、StdRegProv.CheckAccess メソッドは、現在のユーザーのセキュリティ設定をレジストリ キーのセキュリティ記述子と比較して、ユーザーが KEY_SET_VALUE などの特定のアクセス許可を持っているかどうかを判断します。