Problem with Reading registry through SCCM 2012
The below script is reading the registry value and storing to a variable strValue.
It is working fine if we execute directly or as a parameter to cscript or vbscript.But it is not storing any value when we execute this through SCCM as an installer program.
Const HKEY_LOCAL_MACHINE = &H80000002
Dim fn_objReg : Set fn_objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
Dim strKeyPath : strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strValueName = "DisplayVersion"
Dim strProductCode : strProductCode = "{88509E20-3936-4D88-A1C0-B274C7BB5151}"
strKeyPath = strKeyPath & strProductCode
fn_objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
0 Comments
[ + ] Show comments
Answers (5)
Please log in to answer
Posted by:
anonymous_9363
8 years ago
I suspect this is to do with the 'impersonationLevel'. Google the different values for that and experiment using PSExec (saves having to wait for SCCM to get its act together).
Comments:
-
It is working with PSEXEC but not with SCCM. - ur00361883 8 years ago
Posted by:
ur00361883
8 years ago
The root cause for the above problem is SCCM is trying to access 32 bit version of WScript/CScript.So it isn't able to see the 64 bit registry hive.
The below custom function solved this problem.
Function ReadRegStr (RootKey, Key, Value, RegType)
Dim oCtx, oLocator, oReg, oInParams, oOutParams
Set oCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
oCtx.Add "__ProviderArchitecture", RegType
Set oLocator = CreateObject("Wbemscripting.SWbemLocator")
Set oReg = oLocator.ConnectServer("", "root\default", "", "", , , , oCtx).Get("StdRegProv")
Set oInParams = oReg.Methods_("GetStringValue").InParameters
oInParams.hDefKey = RootKey
oInParams.sSubKeyName = Key
oInParams.sValueName = Value
Set oOutParams = oReg.ExecMethod_("GetStringValue", oInParams, , oCtx)
ReadRegStr = oOutParams.sValue
End Function
To use this :
strValue = ReadRegStr (HKEY_LOCAL_MACHINE, strKeyPath,strValueName, 64)
Posted by:
anonymous_9363
8 years ago
Good point. Or the OP could simply call the 64-bit flavour of CScript/WScript which is a tad simpler.
Comments:
-
Can we do any change in the settings of sccm 2012, to use 64 bit version of CScript/WScript.
May be a layman question. - ur00361883 8 years ago
Posted by:
anonymous_9363
8 years ago
Google "sysnative"
Comments:
-
But I am browsing directly the vbscript files, not passing as parameter to cscript/wscript - ur00361883 8 years ago
-
As far as I know, when you are creating new Application in SCCM it starts as 64bit process by default. You can set an option to 'start as 32 bit process on 64bit OS' as you can see at the bottom of this image:
http://myitforum.com/myitforumwp/2012/06/26/configmgr-2012-console-automated-deployment-walkthrough/6-26-2012-2-12-11-pm/
This doesn't apply for the 'Package' model so when you are using SCCM packages you should consider mentioned above 'sysnative' command. - rad33k 8 years ago