StdRegProv類所屬方法的使用(之二)

(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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章