如何在64位Windows Server 2012 R2 for Powershell上设置32位DLL?

我正在运行Windows Server 2012 R2的一台服务器上升级Powershell的一些过时的VBScript自动化。 目前,我正在replace需要从第三方32位DLL创buildCOM对象的脚本。 首先,我安装了包含DLL的第三方程序; 它安装得很好,运行正常。 然后我试图在Powershell中创buildCOM对象,这个对象失败了,并且给我返回了错误“80040154 Class Not Registered”,其中CLSID不是全为零。

我试图排除故障,发现它创build了COM对象,如果我使用Powershell(x86)。 我想,也许这个DLL没有注册为64位的Powershell,并使用sysWoW64 / regsvr32来注册该DLL。 这没有解决问题,所以我也注册了system32 / regsvr32也没有解决它。

然后,我转向谷歌,并从2009年发现这个解决scheme: 解决scheme链接 。 这实际上解决了这个问题,允许在64位Powershell中创build和使用COM对象。 但是,这是一个非常黑客,手工编辑registry不是最可维护的解决scheme。

所以,我的问题是:我应该如何正确设置一个32位DLL与64位Powershell运行? 执行上述解决scheme的“正确”方式是什么?

如果你遇到那种types的DLL,如果你使用SysWow64path中的32位版本的Powershell或者VBscript运行脚本,你可能会得到最好的运行。 它可能看起来倒退,但64位EXE位于System32。

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe C:\Windows\SysWOW64\cscript.exe