2013-09-27 369 views
28

Tôi biết đó là một câu hỏi kỳ lạ nhưng tôi bị khóa vào một nhà cung cấp bên thứ ba khởi chạy một cmd.exe 32 bit trên máy chủ Windows Server 2008 R2 64 bit mục tiêu. Từ đây tôi muốn khởi chạy một cửa sổ PowerShell 64-bit và chạy một kịch bản lệnh.Làm thế nào để khởi động powerhell 64 bit từ 32-bit cmd.exe?

Dưới đây là thử nghiệm của tôi:

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

Nếu tôi chạy này từ một cmd.exe 32-bit Tôi nhận được gì trả lại. Nếu tôi chạy từ một cmd.exe 64 bit, tôi nhận được:

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

Bất kỳ ý tưởng nào về những gì tôi có thể làm để gọi tập lệnh 64 bit PowerShell từ trình bao 32 bit?

Trả lời

61

syswow64 cho phép bạn chạy thực thi hệ thống 32 bit từ mã 64 bit. sysnative cho phép bạn chạy các hệ thống thực thi 64 bit từ mã 32 bit.

Vì vậy, bạn cần phải chạy:

% SystemRoot% \ sysnative \ WindowsPowerShell \ v1.0 \ powershell.exe

+1

Chỉ cần đánh tôi vào cú đấm. :-) –

+5

Tôi có Windows 7 Enterprise 64-bit và tôi nhận được "Hệ thống không thể tìm thấy đường dẫn được chỉ định" nếu tôi sử dụng. Vì vậy, dòng mà làm việc cho tôi để chạy 64 bit powershell là:% systemroot% \ syswow64 \ windowspowershell \ v1.0 \ powershell.exe – dotnetguy

+11

@mishrud là nhầm lẫn. Gọi '% systemroot% \ syswow64 \ windowspowershell \ v1.0 \ powershell.exe' từ 32-bit cmd.exe sẽ mang lại cho bạn sức mạnh 32 bit. Bạn có thể xác minh điều này bằng cách sử dụng 'ls env:' Phiên bản 32-bit sẽ hiển thị 'PROCESSOR_ARCHITECTURE' là' x86' Hơn nữa, 'syswow64' chỉ chứa 32-bit tương đương 64-bit DLL và EXE. –

7

This script sẽ kiểm tra như xem những gì phiên bản của PowerShell bạn đang chạy và sẽ relaunch bản thân đến 64 bit nếu bạn đang chạy trong 32-bit. Khi khởi chạy lại xảy ra nó cũng sẽ truyền vào bất kỳ tham số nào được sử dụng trong cuộc gọi ban đầu.

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

Bạn đã lưu thịt xông khói của mình! Tôi không thể thực hiện lệnh PowerShell IIS PowerShell thông qua công cụ quản lý cấu hình của trình bao PowerShell của SaltStack, và hóa ra nó đang thực thi chúng trong 32 bit (!!) và IIS yêu cầu 64. Thêm nó vào kịch bản của tôi đã lưu nó. Rất xuất sắc. –

+0

Đơn giản, thanh lịch và hoạt động tốt. – DaveBally