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 ) | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 | | | | 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 | | | | | | valRegError = 0 | | | | | | | | arrRegPath = Split( myRegPath, "\", 2 ) | | If IsArray( arrRegPath ) Then | | If UBound( arrRegPath ) <> 1 Then valRegError = 5 | | Else | | valRegError = 5 | | End If | | | | | | 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 | | | | | | If valRegError > 0 Then | | ReadRegValue = Array( myComputer, myRegPath, _ | | myRegPath, myRegValue, _ | | valRegError, "-", "-" ) | | Exit Function | | End If | | | | | | On Error Resume Next | | | | | | Set objReg = GetObject( "winmgmts:{impersonationLevel=impersonate}!//" _ | | & myComputer & "/root/default:StdRegProv" ) | | | | | | If Err Then | | valRegError = Err.Number | | Err.Clear | | On Error Goto 0 | | ReadRegValue = Array( myComputer, myRegPath, _ | | myRegPath, myRegValue, _ | | valRegError, "-", "-" ) | | Exit Function | | End If | | | | | | | | | | objReg.EnumValues strHive, arrRegPath( 1 ), arrValueNames, arrValueTypes | | | | | | If Not IsArray( arrValueNames ) Then | | arrValueNames = Array( "" ) | | arrValueTypes = Array( REG_SZ ) | | End If | | | | If Err Then | | | | valRegError = Err.Number | | Err.Clear | | On Error Goto 0 | | ReadRegValue = Array( myComputer, myRegPath, _ | | myRegPath, myRegValue, _ | | valRegError, "-", "-" ) | | Exit Function | | Else | | | | For i = 0 To UBound( arrValueNames ) | | | | If UCase( arrValueNames( i ) ) = UCase( myRegValue ) Then | | | | valRegType = arrValueTypes( i ) | | | | 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 | | 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 | | 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 | | | | | | If valRegError > 0 Then | | valRegType = "" | | valRegVal = "" | | Err.Clear | | On Error Goto 0 | | End If | | | | | | If valRegType = REG_BINARY Or valRegType = REG_MULTI_SZ Then | | | | | | 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 | | | | | | Set objReg = Nothing | | On Error Goto 0 | | End FunctionCOPY |
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.
http://www.jb51.net/article/29245.htm |