华域联盟 vbs WMI StdRegProv 通过wmi操作注册表的vbscript实现代码 (本地或远程)

WMI StdRegProv 通过wmi操作注册表的vbscript实现代码 (本地或远程)

Because of its length, only the code for the function itself is shown on this page.

The demo script that shows how to use this function is available as a separate download.


复制代码 代码如下:

Function ReadRegValue( myComputer, myRegPath, myRegValue )

' This function reads a value from the registry of any WMI

' enabled computer.

'

' Arguments:

' myComputer a computer name or IP address,

' or a dot for the local computer

' myRegPath a full registry key path, e.g.

' HKEY_CLASSES_ROOT\.jpg or

' HKLM\SOFTWARE\Microsoft\DirectX

' myRegValue the value name to be queried, e.g.

' InstalledVersion or "" for default

' values

'

' The function returns an array with the following elements:

' ReadRegValue(0) the computer name (the first argument)

' ReadRegValue(1) the hive number (see const declarations)

' ReadRegValue(2) the key path without the hive

' ReadRegValue(3) the value name (the third argument)

' ReadRegValue(4) the error number: 0 means no error

' ReadRegValue(5) the data type of the result

' ReadRegValue(6) the actual data, or the first element of an

' array of data for REG_BINARY or REG_MULTI_SZ

'

' Written by Rob van der Woude

' http://www.robvanderwoude.com

' Standard housekeeping

Const HKEY_CLASSES_ROOT = &H80000000

Const HKEY_CURRENT_USER = &H80000001

Const HKEY_LOCAL_MACHINE = &H80000002

Const HKEY_USERS = &H80000003

Const HKEY_CURRENT_CONFIG = &H80000005

Const HKEY_DYN_DATA = &H80000006 ' Windows 95/98 only

Const REG_SZ = 1

Const REG_EXPAND_SZ = 2

Const REG_BINARY = 3

Const REG_DWORD = 4

Const REG_DWORD_BIG_ENDIAN = 5

Const REG_LINK = 6

Const REG_MULTI_SZ = 7

Const REG_RESOURCE_LIST = 8

Const REG_FULL_RESOURCE_DESCRIPTOR = 9

Const REG_RESOURCE_REQUIREMENTS_LIST = 10

Const REG_QWORD = 11

Dim arrRegPath, arrResult(), arrValueNames, arrValueTypes

Dim i, objReg, strHive, valRegError, valRegType, valRegVal

' Assume no error, for now

valRegError = 0

' Split the registry path in a hive part

' and the rest, and check if that succeeded

arrRegPath = Split( myRegPath, "\", 2 )

If IsArray( arrRegPath ) Then

If UBound( arrRegPath ) <> 1 Then valRegError = 5

Else

valRegError = 5

End If

' Convert the hive string to a hive number

Select Case UCase( arrRegPath( 0 ) )

Case "HKCR", "HKEY_CLASSES_ROOT"

strHive = HKEY_CLASSES_ROOT

Case "HKCU", "HKEY_CURRENT_USER"

strHive = HKEY_CURRENT_USER

Case "HKLM", "HKEY_LOCAL_MACHINE"

strHive = HKEY_LOCAL_MACHINE

Case "HKU", "HKEY_USERS"

strHive = HKEY_USERS

Case "HKCC", "HKEY_CURRENT_CONFIG"

strHive = HKEY_CURRENT_CONFIG

Case "HKDD", "HKEY_DYN_DATA"

strHive = HKEY_DYN_DATA

Case Else

valRegError = 5

End Select

' Abort if any error occurred, and return an error code

If valRegError > 0 Then

ReadRegValue = Array( myComputer, myRegPath, _

myRegPath, myRegValue, _

valRegError, "-", "-" )

Exit Function

End If

' Initiate custom error handling

On Error Resume Next

' Create a WMI registry object

Set objReg = GetObject( "winmgmts:{impersonationLevel=impersonate}!//" _

& myComputer & "/root/default:StdRegProv" )

' Abort on failure to create the object

If Err Then

valRegError = Err.Number

Err.Clear

On Error Goto 0

ReadRegValue = Array( myComputer, myRegPath, _

myRegPath, myRegValue, _

valRegError, "-", "-" )

Exit Function

End If

' Get a list of all values in the registry path;

' we need to do this in order to find out the

' exact data type for the requested value

objReg.EnumValues strHive, arrRegPath( 1 ), arrValueNames, arrValueTypes

' If no values were found, we'll need to retrieve a default value

If Not IsArray( arrValueNames ) Then

arrValueNames = Array( "" )

arrValueTypes = Array( REG_SZ )

End If

If Err Then

' Abort on failure, returning an error code

valRegError = Err.Number

Err.Clear

On Error Goto 0

ReadRegValue = Array( myComputer, myRegPath, _

myRegPath, myRegValue, _

valRegError, "-", "-" )

Exit Function

Else

' Loop through all values in the list . . .

For i = 0 To UBound( arrValueNames )

' . . . and find the one requested

If UCase( arrValueNames( i ) ) = UCase( myRegValue ) Then

' Read the requested value's data type

valRegType = arrValueTypes( i )

' Based on the data type, use the appropriate query to retrieve the data

Select Case valRegType

Case REG_SZ

objReg.GetStringValue strHive, arrRegPath( 1 ), _

myRegValue, valRegVal

If Err Then valRegError = Err.Number

Case REG_EXPAND_SZ

objReg.GetExpandedStringValue strHive, arrRegPath( 1 ), _

myRegValue, valRegVal

If Err Then valRegError = Err.Number

Case REG_BINARY ' returns an array of bytes

objReg.GetBinaryValue strHive, arrRegPath( 1 ), _

myRegValue, valRegVal

If Err Then valRegError = Err.Number

Case REG_DWORD

objReg.GetDWORDValue strHive, arrRegPath( 1 ), _

myRegValue, valRegVal

If Err Then valRegError = Err.Number

Case REG_MULTI_SZ ' returns an array of strings

objReg.GetMultiStringValue strHive, arrRegPath( 1 ), _

myRegValue, valRegVal

If Err Then valRegError = Err.Number

Case REG_QWORD

objReg.GetQWORDValue strHive, arrRegPath( 1 ), _

myRegValue, valRegVal

If Err Then valRegError = Err.Number

Case Else

valRegError = 5

End Select

End If

Next

End If

' Check if an error occurred

If valRegError > 0 Then

valRegType = ""

valRegVal = ""

Err.Clear

On Error Goto 0

End If

' Return the data in an array

If valRegType = REG_BINARY Or valRegType = REG_MULTI_SZ Then

' First, deal with registry data which is

' returned as array instead of single value

ReDim Preserve arrResult( 6 + UBound( valRegVal ) )

arrResult( 0 ) = myComputer

arrResult( 1 ) = strHive

arrResult( 2 ) = arrRegPath( 1 )

arrResult( 3 ) = myRegValue

arrResult( 4 ) = valRegError

arrResult( 5 ) = valRegType

For i = 0 To UBound( valRegVal )

arrResult( 6 + i ) = valRegVal( i )

Next

ReadRegValue = arrResult

Else

ReadRegValue = Array( myComputer, strHive, arrRegPath( 1 ), _

myRegValue, valRegError, valRegType, valRegVal )

End If

' Finished

Set objReg = Nothing

On Error Goto 0

End Function

Requirements:

Windows version: ME, 2000, XP, Server 2003, or Vista (95, 98, NT 4 with WMI CORE 1.5)

Network: any

Client software: WMI CORE 1.5 for Windows 95, 98 or NT 4

Script Engine: any

Summarized: Can work on any Windows computer, but WMI CORE 1.5 is required for Windows 95, 98 or NT 4.

Can be used in *.vbs with CSCRIPT.EXE or WSCRIPT.EXE, as well as in HTAs.
您可能感兴趣的文章:

本文由 华域联盟 原创撰写:华域联盟 » WMI StdRegProv 通过wmi操作注册表的vbscript实现代码 (本地或远程)

转载请保留出处和原文链接:https://www.cnhackhy.com/16219.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部