다음을 통해 공유


레지스트리 데이터 가져오기

WMI StdRegProv 클래스와 그 메서드를 사용하여 레지스트리 데이터를 가져오거나 수정할 수 있습니다. Regedit 유틸리티를 사용하여 로컬 컴퓨터에서 레지스트리 값을 보고 변경할 때 StdRegProv를 사용하면 스크립트 또는 애플리케이션을 사용하여 로컬 컴퓨터 및 원격 컴퓨터에서 이러한 작업을 자동화할 수 있습니다.

StdRegProv에는 다음을 수행하는 메서드가 포함되어 있습니다.

  • 사용자의 액세스 권한 확인
  • 레지스트리 키 생성, 열거 및 삭제
  • 하위 키 또는 명명된 값 생성, 열거 및 삭제
  • 데이터 값 읽기, 쓰기 및 삭제

레지스트리 데이터는 최상위 키 아래에 중첩된 하위 트리, 키 및 하위 키로 구성됩니다. 실제 데이터 값을 항목 또는 명명된 값이라고 합니다.

하위 트리에는 다음이 포함됩니다.

  • HKEY_CLASSES_ROOT(줄여서 HKCR)
  • HKEY_CURRENT_USER(HKCU)
  • HKEY_LOCAL_MACHINE(HKLM)
  • HKEY_USERS
  • HKEY_CURRENT_CONFIG

예를 들어, 레지스트리 항목 HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion에서 HKEY 하위 트리는 SOFTWARE이고 하위 키는 MicrosoftDirectX이고 명명된 값 항목은 InstalledVersion입니다.

RegistryKeyChangeEvent는 특정 키가 변경될 때 발생하지만 항목은 값이 변경되는 방식을 식별하지 않으며 지정된 키 아래의 변경 내용에 의해 이 이벤트가 트리거되지 않습니다. 계층적 키 구조의 모든 위치에서 변경 내용을 식별하려면 특정 값이나 발생하는 키 변경 내용을 반환하지 않는 RegistryTreeChangeEvent를 사용합니다. 특정 항목 값 변경을 가져오려면 RegistryValueChangeEvent를 사용한 다음 항목을 읽어 기준 값을 가져옵니다.

StdRegProv에는 Win32 클래스 구조와 다른 C++ 또는 스크립트에서 호출할 수 있는 메서드만 있습니다.

다음 코드 예제는 StdRegProv.EnumKey 메서드를 사용하여 레지스트리 키 아래에 모든 Microsoft 소프트웨어 하위 키를 나열하는 방법을 보여줍니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

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

strKeyPath = "SOFTWARE\Microsoft"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

참고 항목

VBScript는 더 이상 사용되지 않습니다. 자세한 내용은 블로그 게시물 VBScript 사용 중단: 타임라인 및 다음 단계를 참조하세요.


# The signature for EnumKey method of StdRegProv class:
#
# uint32 EnumKey(
#  [in]  uint32 hDefKey = HKEY_LOCAL_MACHINE,
#  [in]  string sSubKeyName,
#  [out] string sNames[]
# );

$arguments = @{
    hDefKey = [uint32]2147483650 # HKEY_LOCAL_MACHINE
    sSubKeyName = 'SOFTWARE\Microsoft'
}

$subkeys = Invoke-CimMethod -ClassName StdRegProv -MethodName EnumKey -Arguments $arguments
subkeys.sNames

StdRegProv에는 다양한 레지스트리 항목 값 데이터 형식을 읽는 다양한 메서드가 있습니다. 항목에 알 수 없는 값이 있는 경우 StdRegProv.EnumValues를 호출하여 나열할 수 있습니다. 다음 표에는 StdRegProv 메서드와 데이터 형식 간의 대응 관계가 나열되어 있습니다.

메서드 데이터 형식
GetBinaryValue REG_BINARY
GetDWORDValue REG_DWORD
GetExpandedStringValue REG_EXPAND_SZ
GetMultiStringValue REG_MULTI_SZ
GetStringValue REG_SZ

 

다음 표에는 새 키 또는 값을 만들거나 기존 키를 변경하는 해당 메서드가 나열되어 있습니다.

메서드 데이터 형식
SetBinaryValue REG_BINARY
SetDWORDValue REG_DWORD
SetExpandedStringValue REG_EXPAND_SZ
SetMultiStringValue REG_MULTI_SZ
SetStringValue REG_SZ

 

다음 예제는 레지스트리 키에서 시스템 이벤트 로그의 원본 목록을 읽는 방법을 보여줍니다.

HKEY_LOCAL_MACHINE\SYSTEM\제 컨트롤 집합\\트 로그\시스템

다중 문자열 값의 항목은 컬렉션 또는 배열로 처리됩니다.

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

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

strKeyPath = "SYSTEM\CurrentControlSet\Services\Eventlog\System"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

참고 항목

VBScript는 더 이상 사용되지 않습니다. 자세한 내용은 블로그 게시물 VBScript 사용 중단: 타임라인 및 다음 단계를 참조하세요.


# The signature for EnumKey method of StdRegProv class:
#
# uint32 EnumKey(
#  [in]  uint32 hDefKey = HKEY_LOCAL_MACHINE,
#  [in]  string sSubKeyName,
#  [out] string sNames[]
# );

$arguments = @{
    hDefKey = [uint32]2147483650 # HKEY_LOCAL_MACHINE
    sSubKeyName = 'SYSTEM\CurrentControlSet\Services\Eventlog\System'
}

$subkeys = Invoke-CimMethod -ClassName StdRegProv -MethodName EnumKey -Arguments $arguments
subkeys.sNames

레지스트리 공급자는 LocalSystem이 아닌 LocalService에서 호스트됩니다. 따라서 하위 트리 HKEY_CURRENT_USER에서 원격으로 정보를 가져올 수 없습니다. 그러나 로컬 컴퓨터에서 실행되는 스크립트는 여전히 HKEY_CURRENT_USER에 액세스할 수 있습니다. 원격 컴퓨터에서 호스팅 모델을 LocalSystem으로 설정할 수 있지만 원격 컴퓨터의 레지스트리가 적대적인 액세스에 취약하기 때문에 보안 위험이 있습니다. 자세한 내용은 공급자 호스팅 및 보안을 참조하세요.

WMI 작업: 레지스트리