(02) EnumValues
列举给定子键的键值名称和键值类型。如果没有改变过,总是返回子键的默认键值,如果数据是空则返回空串("")。
uint32 EnumValues(
[in, optional] uint32 hDefKey = 2147483650,
[in] string sSubKeyName,
[out] string sNames[],
[out] sint32 Types[]
);
例1:列举HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Control\Lsa下的键值名称和键值类型
const HKEY_LOCAL_MACHINE = &H80000002
const REG_SZ = 1
const REG_EXPAND_SZ = 2
const REG_BINARY = 3
const REG_DWORD = 4
const REG_MULTI_SZ = 7
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Control\Lsa"
oReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath,_
arrValueNames, arrValueTypes
For I=0 To UBound(arrValueNames)
Select Case arrValueTypes(I)
Case REG_SZ
DataType = "Data Type: String"
Case REG_EXPAND_SZ
DataType = "Data Type: Expanded String"
Case REG_BINARY
DataType = "Data Type: Binary"
Case REG_DWORD
DataType = "Data Type: DWORD"
Case REG_MULTI_SZ
DataType = "Data Type: Multi String"
End Select
WScript.Echo "Value Name: " & arrValueNames(I) & "," & vbTab & DataType
Next
例2:通过ExecMethod_()方法调用EnumValues。
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_SZ = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_MULTI_SZ = 7
sComputer = "."
sMethod = "EnumValues"
hTree = HKEY_LOCAL_MACHINE
'sKey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
sKey = "SYSTEM\CurrentControlSet\Control\Lsa"
Set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}//" & _
sComputer & "/root/default:StdRegProv")
Set oMethod = oRegistry.Methods_(sMethod)
Set oInParam = oMethod.inParameters.SpawnInstance_()
oInParam.hDefKey = hTree
oInParam.sSubKeyName = sKey
Set oOutParam = oRegistry.ExecMethod_(sMethod, oInParam)
For i=0 To UBound(oOutParam.Properties_("sNames"))
sMessage = oOutParam.Properties_("sNames")(i)
Select Case oOutParam.Properties_("Types")(i)
Case REG_SZ sMessage = sMessage & " :REG_SZ"
Case REG_EXPAND_SZ sMessage = sMessage & " :REG_EXPAND_SZ"
Case REG_BINARY sMessage = sMessage & " :REG_BINARY"
Case REG_DWORD sMessage = sMessage & " :REG_DWORD"
Case REG_MULTI_SZ sMessage = sMessage & " :REG_MULTI_SZ"
End Select
WScript.Echo sMessage
Next
例3:相应的PS程序。
$HKEY_LOCAL_MACHINE = "&H80000002"
$REG_SZ = 1
$REG_EXPAND_SZ = 2
$REG_BINARY = 3
$REG_DWORD = 4
$REG_MULTI_SZ = 7
$computer = "."
$namespace = "root\Default"
$strKeyPath = "SYSTEM\CurrentControlSet\Control\Lsa"
$oreg = get-wmiobject -list -namespace $namespace -ComputerName $computer | where-object { $_.name -eq "StdRegProv" }
$OutParams = $oreg.EnumValues($HKEY_LOCAL_MACHINE, $strKeyPath)
"Subkeys under " + "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa"
Foreach($OutParam In $OutParams)
{
$Counts = $OutParam.sNames.count
for ( $i=0; $i -lt $Counts; $i++ )
{
Switch ($OutParam.Types[$i])
{
"$REG_SZ" { $DataType = "Data Type: String" }
"$REG_EXPAND_SZ" { $DataType = "Data Type: Expanded String" }
"$REG_BINARY" { $DataType = "Data Type: Binary" }
"$REG_DWORD" { $DataType = "Data Type: DWORD" }
"$REG_MULTI_SZ" { $DataType = "Data Type: Multi String" }
}
"Value Name: " + $OutParam.sNames[$i] + "`t" + $DataType
}
}
(03) GetStringValue方法
返回键值类型为REG_SZ的指定键值名称的键值数值。
uint32 GetStringValue(
[in] uint32 hDefKey = 2147483650,
[in] string sSubKeyName,
[in] string sValueName,
[out] string sValue
);
例1:返回HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon下键值名为DefaultUserName的键值数值。此例采用ExecMethod_()方法调用GetStringValue。
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_CURRENT_CONFIG = &H80000005
sComputer = "."
sMethod = "GetStringValue"
hTree = HKEY_LOCAL_MACHINE
sKey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
sValueName = "DefaultUserName"
Set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}//" & _
sComputer & "/root/default:StdRegProv")
Set oMethod = oRegistry.Methods_(sMethod)
Set oInParam = oMethod.inParameters.SpawnInstance_()
oInParam.hDefKey = hTree
oInParam.sSubKeyName = sKey
oInParam.sValueName = sValueName
Set oOutParam = oRegistry.ExecMethod_(sMethod, oInParam)
WScript.Echo "Key Value of DefaultUserName(Key NAme)is : " & oOutParam.Properties_("sValue")
例2:直接调用GetStringValue。
Const HKEY_LOCAL_MACHINE = &H80000002
sComputer = "."
hDefKey = HKEY_LOCAL_MACHINE
sSubKeyName = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
sValueName = "DefaultUserName"
Set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}//" & _
sComputer & "/root/default:StdRegProv")
oOutParam = oRegistry.GetStringValue(hDefKey, sSubKeyName, sValueName, sValue)
WScript.Echo "Return code: " & oOutParam
WScript.Echo "Key Value of DefaultUserName(Key Name)is : " & sValue
例3:相应的PS程序。它是直接调用GetStringValue方法
$computer = "."
$namespace = "root\DEFAULT"
$HKLM = 2147483650
$oreg = get-wmiobject -list -namespace $namespace -ComputerName $computer | where-object { $_.name -eq "StdRegProv" }
$strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
$strValueName = "DefaultUserName"
$oOutParam = $oreg.GetStringValue($HKLM,$strKeyPath,$strValueName)
"Key Value of DefaultUserName(Key NAme)is : " + $oOutParam.sValue
本文转载自 http://bbs.winos.cn/viewthread.php?tid=70635