Подтвердить что ты не робот

Как запустить 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?

4b9b3361

Ответ 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
#############################################################################