如何通过vbscript从64位计算机中读取注册表值或检查注册表是否存在64位cmd,因为sccm使用32位cmd
答案 0 :(得分:1)
这有几种可能性。首先,如果你有SCCM 2012,你可以使用应用程序而不是包/程序。应用程序应在适当的机器上以64位执行。
如果你需要一个软件包,并且你只想在64Bit机器上执行它(或者因为你只有那些或者因为你创建了一个具有特殊环境设置的几个软件包,将它限制为仅64Bit)你可以使用{{3 }}。 Sysnative是C:\ windows中的硬链接,可用于强制访问本机system32文件夹,而不是模拟的WoW64文件夹。
因此,您将使用C:\Windows\sysnative\wscript.exe <path to your script>
作为程序可执行文件的路径,该脚本将使用64Bit脚本主机执行,因此您可以使用注册表访问。不幸的是,MS错过了在32Bit机器上包含sysnative的机会,所以在这些系统上它不起作用。
第三种可能性也基于sysnative,但也适用于32Bit系统。如果在脚本开头包含以下代码:
If fso.FileExists("C:\Windows\SysWOW64\wscript.exe") Then ' very basic check for 64bit Windows, you can replace it with a more complicated wmi check if you find it not reliable enough
If InStr(1, WScript.FullName, "SysWOW64", vbTextCompare) <> 0 Then ' = case insensitive check
newFullName = Replace(WScript.FullName, "SysWOW64", "Sysnative", 1, -1, vbTextCompare) ' System32 is replaced by Sysnative to deactivate WoW64, cscript or wscript stay the same
newArguments = "" ' in case of command line arguments they are passed on
For Each arg In WScript.Arguments
newArguments = newArguments & arg & " "
Next
wso.Run newFullName & " """ & WScript.ScriptFullName & """ " & newArguments, , False
WScript.Quit '32 Bit Scripting Host is closed
End If
End If
它将检查它是否是64Bit计算机,如果是,则使用本机脚本主机重新启动,保留所有参数。如果它没有检测到64Bit,它将在32Bit中正常运行。
答案 1 :(得分:0)
strValue64 = ReadRegStr(HKEY_LOCAL_MACHINE,strKeyPath64,“UninstallString”,64) strValue32 = ReadRegStr(HKEY_LOCAL_MACHINE,strKeyPath32,“UninstallString”,64) 函数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
结束功能