Как запустить 64-разрядную версию PowerShell из 32-разрядного cmd.exe?
Я знаю, что это странный вопрос, но я заблокирован сторонним поставщиком, который запускает 32-разрядный cmd.exe на целевом 64-разрядном кластерном сервере Windows Server 2008 R2. Отсюда я хочу запустить 64-битное окно PowerShell и запустить script.
Здесь мой тест:
powershell.exe "Get-Module -ListAvailable| Where-Object {$_.name -eq 'FailoverClusters'}"
Если я запустил это из 32-разрядного cmd.exe, я ничего не получил. Если я запускаю из 64-разрядного cmd.exe, я получаю:
ModuleType Name ExportedCommands
---------- ---- ----------------
Manifest FailoverClusters {}
Любые идеи о том, что я могу сделать, чтобы вызвать 64-разрядную оболочку powershell script из 32-разрядной командной оболочки cmd?
Ответы
Ответ 1
syswow64 позволяет запускать 32-битные системные исполняемые файлы из 64-битного кода.
sysnative позволяет запускать 64-битные системные исполняемые файлы из 32-битного кода.
Итак, вам нужно запустить:
%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe
Ответ 2
Этот script будет проверять, как посмотреть, какую версию powershell вы используете, и перезапустится до 64-битного, если вы работаете в 32-битный. При повторном запуске он также будет передавать любые параметры, используемые в исходном вызове.
#############################################################################
#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
#############################################################################