레지스트리 데이터 가져오기
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이고 하위 키는 Microsoft 및 DirectX이고 명명된 값 항목은 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으로 설정할 수 있지만 원격 컴퓨터의 레지스트리가 적대적인 액세스에 취약하기 때문에 보안 위험이 있습니다. 자세한 내용은 공급자 호스팅 및 보안을 참조하세요.
관련 항목