web-dev-qa-db-fra.com

Comment lancer le PowerShell 64 bits à partir de cmd.exe 32 bits?

Je sais que c'est une question étrange, mais je suis enfermé dans un fournisseur tiers qui lance un cmd.exe 32 bits sur un serveur en cluster cible Windows Server 2008 R2 64 bits. À partir de là, je veux lancer une fenêtre PowerShell 64 bits et exécuter un script.

Voici mon test:

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

Si je l'exécute à partir d'un cmd.exe 32 bits, je ne reçois rien en retour. Si je cours à partir d'un cmd.exe 64 bits, j'obtiens:

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

Avez-vous des idées sur ce que je peux faire pour invoquer un script PowerShell 64 bits à partir d'un shell cmd 32 bits?

32
Mark Allison

syswow64 vous permet d'exécuter des exécutables système 32 bits à partir de code 64 bits. sysnative vous permet d'exécuter des exécutables système 64 bits à partir de code 32 bits.

Vous devez donc exécuter:

%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe
80
Jason Shirk

Ce script vérifiera comme voir quelle version de powershell vous utilisez et se relancera en 64 bits si vous utilisez en 32 bits. Lorsque la relance se produit, elle transmet également tous les paramètres utilisés dans l'appel d'origine.

#############################################################################
#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
#############################################################################    
12
ProfessionalAmateur