假如你使用到某个集成开发部署软件(比如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
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!