在32位PowerShell中启动64位PowerShell


假如你使用到某个集成开发部署软件(比如jenkins),在配置中定义了一段PowerShell脚本。但是因为集成环境的本地Agent是32位的,所以当它启动PowerShell时,启动的也是32位的PowerShell。但是你配置PowerShell脚本块依赖于某些第三方module,而这些第三方module只支持64位环境。

最终导致的尴尬错误,你在32位的PowerShell中尝试通过命令,Import-Module,来导入64位的Module,肯定提示找不到。纵然你非常暴力的把这个Module从64位复制一份到32位PowerShell路径对应的Module目录:C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Modules,仍旧可能报错,因为改Module依赖的dll程序集不支持。

要解决上面的问题,就回到了本篇主题,我们要在32的PowerShell中启动64位的PowerShell。

最先想到的是:

PS> Start-Process C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

想法不错,但是现实很残酷,你启动的新PowerShell窗口仍旧是32位的,它的路径位于:

PS> $pshome
C:\Windows\SysWOW64\WindowsPowerShell\v1.0

进程的启动逻辑中,应当做了一些讨厌的自动转换,你想启动64位,但是因为当前应用程序是32位的,它给你自动转换成了32位路径,想哭了吧。别急,我们可以换一种写法,就可以了。

PS> Start-Process "$env:windir\sysnative\WindowsPowerShell\v1.0\powershell.exe"

把主逻辑写在另一个脚本文件中:test.ps1,命令可以这样写:

PS> Start-Process "$env:windir\sysnative\WindowsPowerShell\v1.0\powershell.exe" -ArgumentList "-File D:\test.ps1" -Wait
本文链接: https://www.pstips.net/start-64bit-powershell-from-32.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注