다음을 통해 공유


레지스트리 데이터 변경

WMI용 시스템 레지스트리 공급자 클래스 StdRegProv에는 다음을 수행하는 메서드가 있습니다.

  • 레지스트리 키를 만들거나 삭제합니다.

    CreateKey 또는 DeleteKey를 사용합니다.

  • 키 아래에 있을 때 항목이라고 하는 명명된 값을 생성하거나 삭제합니다.

    새 값의 이름과 SetBinaryValue, SetDWORDValue, SetExpandedStringValue, SetMultiStringValue 또는 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_MACHINE\SOFTWARE\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와 같은 특정 권한이 있는지 확인합니다.