When I run the vbs-file directly all its OK. Embedded in MS it returns an "invalid parameter" error. The error occurs in this Line:
"objCtx.Add "__ProviderArchitecture", RegType". Without this Line the script returns only 32-bit Instances of the SQL Server and not the 64-bit ones. Does anybody got a hint how to prevent this error?
Here is the complete code:
Code: Select all
////////////////////////////////////////////////////////////////////////////////////////////
// Get SQL Server Instances //
////////////////////////////////////////////////////////////////////////////////////////////
Let>strInstNames=SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL
Let>strInstanceName=Select
Let>strArchitecture=64
Gosub>GetInstance
SRT>GetInstance
Let>valuelist=
VBSTART
Const HKEY_LOCAL_MACHINE = &H80000002
Function GetInstanceList (RootKey, Key, RegType)
Dim objCtx, objLocator, objReg, objServices, objInParams, objOutParams
Dim arrInstances
Dim lRC
Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
objCtx.Add "__ProviderArchitecture", RegType
Set objLocator = CreateObject("Wbemscripting.SWbemLocator")
Set objServices = objLocator.ConnectServer("","root\default", "","",,,,objCtx)
Set objReg = objServices.Get("StdRegProv")
Set objInParams = objReg.Methods_("EnumKey").InParameters
objInParams.hDefKey = RootKey
objInParams.sSubKeyName = Key
Set objOutParams = objReg.ExecMethod_("EnumValues", objInParams,,objCtx)
arrInstances = objOutParams.sNames
GetInstanceList=Join(arrInstances,vbCrLf)
On Error Resume Next
End Function
VBEND
VBEval>GetInstanceList(HKEY_LOCAL_MACHINE,"%strInstNames%","%strArchitecture%"),valuelist
Separate>valuelist,CRLF,vals
Let>k=0
Repeat>k
Let>k=k+1
Let>thisval=vals_%k%
Let>strInstanceName=%strInstanceName%%CRLF%%thisval%
Until>k=vals_count
END>GetInstance
MessageModal>%strInstanceName%
Label>Exit