2013-09-27 11 views
28

私は奇妙な問題だと知っていますが、ターゲットの64ビットWindows Server 2008 R2クラスタサーバーで32ビットcmd.exeを起動するサードパーティベンダーに縛られています。ここからは、64ビットのPowerShellウィンドウを起動してスクリプトを実行したいと考えています。私は何も返されません取得する32ビットのCMD.EXEからこれを実行する場合32ビットcmd.exeから64ビットPowerShellを起動するには?

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

は、ここに私のテストです。私は、64ビットのCMD.EXEから実行した場合、私は得る:私は、32ビットCMDシェルから64ビットのPowerShellスクリプトを呼び出すために何ができるかに

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

任意のアイデア?

答えて

61

syswow64では、64ビットコードから32ビットシステム実行ファイルを実行できます。 sysnativeを使用すると、32ビットコードから64ビットシステム実行ファイルを実行できます。

だから、あなたが実行する必要があります。

の%SystemRoot%\ sysnative \ WindowsPowerShell \ v1.0をするの\たpowershell.exe

+1

ちょうど私をパンチに打つ。 :-) –

+5

私はWindows 7 Enterprise 64-bitを持っており、これを使用すると "指定されたパスが見つかりません"というメッセージが表示されます。ですから、私が64ビットパワーシェルを実行するために動作する行は次のとおりです。%systemroot%\ syswow64 \ windowspowershell \ v1.0 \ powershell.exe – dotnetguy

+11

@mishrudは間違っています。 32ビットのcmd.exeから '%systemroot%\ syswow64 \ windowspowershell \ v1.0 \ powershell.exe'を呼び出すと、32ビットのPowerShellが得られます。これは 'ls env:'を使って確認することができます。32ビット版は 'PROCESSOR_ARCHITECTURE'を' x86'と表示します。さらに、 'syswow64'には64ビットのDLLとEXEの32ビットに相当するものだけが含まれています。 –

7

This scriptは、あなたが実行しているの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 
#############################################################################  
+0

あなたは私のベーコンを救った!私は設定管理ツールSaltStackのpowershellシェルでIIS powershellコマンドレットを実行することができませんでした。それは32ビット(!!)でIISを実行していたことが判明し、IISは64を必要としました。非常に優れています。 –

+0

シンプルでエレガントで、うまくいきます。 – DaveBally

関連する問題