2013-09-27 3 views
28

मैं जानता हूँ कि यह एक अजीब सवाल है लेकिन मैं एक तीसरी पार्टी के विक्रेता जो लक्ष्य 64-बिट Windows Server 2008 R2 सर्वर क्लस्टर पर एक 32-बिट cmd.exe की शुरूआत में बंद कर दिया है। यहां से मैं 64-बिट पावरशेल विंडो लॉन्च करना चाहता हूं और एक स्क्रिप्ट चला सकता हूं।32-बिट cmd.exe से 64-बिट पावरहेल लॉन्च कैसे करें?

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

अगर मैं एक 32-बिट cmd.exe मैं कुछ भी नहीं लौटे पाने से चलाएँ:

यहाँ मेरी परीक्षा है। अगर मैं एक 64-बिट cmd.exe से चला मैं:

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

मैं क्या एक 32-बिट cmd खोल से एक 64-बिट powershell स्क्रिप्ट आह्वान करने के लिए क्या कर सकते हैं पर कोई भी विचार?

उत्तर

61

syswow64 आप 64 बिट कोड से 32 बिट प्रणाली निष्पादनयोग्य चलाने देता है। sysnative आपको 32 बिट कोड से 64 बिट सिस्टम निष्पादन योग्य चलाने देता है।

तो, आप को चलाने के लिए की जरूरत है:

% SystemRoot% \ sysnative \ WindowsPowerShell \ के रूप में देखते powershell के किस संस्करण चला रहे हैं और खुद को लॉन्च हो जाएंगे v1.0 \ PowerShell.exe

+1

बस मुझे पंच को हराया। :-) –

+5

मेरे पास विंडोज 7 एंटरप्राइज़ 64-बिट है और यदि मैं इसका उपयोग करता हूं तो मुझे "सिस्टम निर्दिष्ट पथ नहीं मिल सकता"। % \ Syswow64 \ windowspowershell \ v1.0 \ PowerShell.exe – dotnetguy

+11

@mishrud गलत है% systemroot: तो लाइन है कि मेरे लिए काम करता 64 बिट powershell चलाने के लिए इस है। कॉलिंग '% systemroot% \ syswow64 \ windowspowershell \ v1.0 \ 32-बिट cmd.exe से powershell.exe' आप 32-बिट powershell हो जाता है। आप 'ls env: 'का उपयोग करके इसे सत्यापित कर सकते हैं। 32-बिट संस्करण' PROCESSOR_ARCHITECTURE' को 'x86' के रूप में दिखाएगा, इसके अलावा,' syswow64' में 64-बिट DLLs और EXEs के केवल 32-बिट समकक्ष हैं। –

7

This script की जाँच करेगा यदि आप 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

आपने मेरा बेकन बचाया! मैं कॉन्फ़िगरेशन प्रबंधन टूल सॉल्टस्टैक के पावरहेल शैल के माध्यम से आईआईएस पावरहेल cmdlets निष्पादित नहीं कर सका, और यह पता चला कि यह 32 बिट (!!) और आईआईएस में 64 को निष्पादित कर रहा था। मेरी स्क्रिप्ट पर इसे सहेजने से इसे बचाया गया। अति उत्तम। –

+0

सरल, सुरुचिपूर्ण और यह काम करता है, अच्छा। – DaveBally

संबंधित मुद्दे