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 シェルから 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 に答える