41

我知道这是一个奇怪的问题,但我被锁定在第三方供应商中,它在目标 64 位 Windows Server 2008 R2 集群服务器上启动 32 位 cmd.exe。从这里我想启动一个 64 位 PowerShell 窗口并运行一个脚本。

这是我的测试:

powershell.exe "Get-Module -ListAvailable| Where-Object {$_.name -eq 'FailoverClusters'}"

如果我从 32 位 cmd.exe 运行它,我什么也得不到。如果我从 64 位 cmd.exe 运行,我会得到:

ModuleType Name                      ExportedCommands
---------- ----                      ----------------
Manifest   FailoverClusters          {}

关于如何从 32 位 cmd shell 调用 64 位 powershell 脚本的任何想法?

4

2 回答 2

97

syswow64 允许您从 64 位代码运行 32 位系统可执行文件。sysnative 允许您从 32 位代码运行 64 位系统可执行文件。

所以,你需要运行:

%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe
于 2013-09-27T16:44:15.143 回答
23

此脚本将检查您正在运行的 powershell 版本,如果您在 32 位中运行,它将重新启动到 64 位。当重新启动发生时,它还将传递原始调用中使用的任何参数。

#############################################################################
#If Powershell is running the 32-bit version on a 64-bit machine, we 
#need to force powershell to run in 64-bit mode .
#############################################################################
if ($env:PROCESSOR_ARCHITEW6432 -eq "AMD64") {
    write-warning "Y'arg Matey, we're off to 64-bit land....."
    if ($myInvocation.Line) {
        &"$env:WINDIR\sysnative\windowspowershell\v1.0\powershell.exe" -NonInteractive -NoProfile $myInvocation.Line
    }else{
        &"$env:WINDIR\sysnative\windowspowershell\v1.0\powershell.exe" -NonInteractive -NoProfile -file "$($myInvocation.InvocationName)" $args
    }
exit $lastexitcode
}


write-host "Main script body"

#############################################################################
#End
#############################################################################    
于 2016-08-16T17:27:10.853 回答