मैं .NET 4 रनटाइम के साथ PowerShell कैसे चला सकता हूं?



Answers

पावरशेल के साथ .NET के नए संस्करण (ओं) का उपयोग करके ब्लॉग पोस्ट में मैंने पाया है कि सबसे अच्छा समाधान है। यह powerhell.exe को .NET 4 असेंबली के साथ चलाने की अनुमति देता है।

बस $pshome\powershell.exe.config संशोधित करें (या बनाएं) ताकि इसमें निम्न शामिल हों:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
        <supportedRuntime version="v4.0.30319"/> 
        <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

अतिरिक्त, त्वरित सेटअप नोट्स:

स्थान और फ़ाइलें कुछ हद तक मंच निर्भर हैं; हालांकि आपको समाधान के लिए समाधान कैसे करना है, इस बारे में आपको एक इनलाइन जानकारी दी जाएगी।

  • cd $pshome विंडो में cd $pshome निष्पादित करके आप अपने कंप्यूटर पर cd $pshome का स्थान पा सकते हैं (डॉस प्रॉम्प्ट से काम नहीं करता है)।
    • पथ कुछ ऐसा होगा (उदाहरण) C:\Windows\System32\WindowsPowerShell\v1.0\
  • कॉन्फ़िगरेशन डालने के लिए फ़ाइल नाम है: powershell.exe.config अगर आपका PowerShell.exe निष्पादित किया जा रहा है (यदि आवश्यक हो तो कॉन्फ़िगरेशन फ़ाइल बनाएं)।
    • यदि PowerShellISE.Exe चल रहा है तो आपको PowerShellISE.Exe.config रूप में अपनी साथी कॉन्फ़िगरेशन फ़ाइल बनाने की आवश्यकता है
Question

मैं एक PowerShell स्क्रिप्ट अद्यतन कर रहा हूं जो कुछ .NET असेंबली प्रबंधित करता है। लिपि को .NET 2 (पावरशेल के साथ चलने वाले ढांचे के समान संस्करण) के खिलाफ बनाई गई असेंबली के लिए लिखा गया था, लेकिन अब .NET 4 असेंबली के साथ-साथ .NET 2 असेंबली के साथ काम करने की आवश्यकता है।

चूंकि .NET 4 फ्रेमवर्क के पुराने संस्करणों के विरुद्ध बनाए गए चल रहे अनुप्रयोगों का समर्थन करता है, ऐसा लगता है कि .NET 4 रनटाइम के साथ PowerShell लॉन्च करना सबसे आसान समाधान है जब मुझे इसे .NET 4 असेंबली के विरुद्ध चलाने की आवश्यकता होती है।

मैं .NET 4 रनटाइम के साथ PowerShell कैसे चला सकता हूं?




एक और विकल्प के रूप में, नवीनतम पॉशकंसोल रिलीज में किसी भी कॉन्फ़िगरेशन के बिना .NET 4 आरसी (जो आरटीएम रिलीज के खिलाफ ठीक काम करता है) को लक्षित बाइनरी शामिल है।




यदि आप अभी भी PowerShell v1.0 या v2.0 पर फंस गए हैं, तो जेसन स्टैंग्रोम के उत्कृष्ट उत्तर पर मेरी विविधता है।

निम्नलिखित सामग्री के साथ अपने पथ पर कहीं भी powershell4.cmd बनाएं:

@echo off
:: http://.com/questions/7308586/using-batch-echo-with-special-characters
if exist %~dp0powershell.exe.activation_config goto :run
echo.^<?xml version="1.0" encoding="utf-8" ?^>                 > %~dp0powershell.exe.activation_config
echo.^<configuration^>                                        >> %~dp0powershell.exe.activation_config
echo.  ^<startup useLegacyV2RuntimeActivationPolicy="true"^>  >> %~dp0powershell.exe.activation_config
echo.    ^<supportedRuntime version="v4.0"/^>                 >> %~dp0powershell.exe.activation_config
echo.  ^</startup^>                                           >> %~dp0powershell.exe.activation_config
echo.^</configuration^>                                       >> %~dp0powershell.exe.activation_config
:run
:: point COMPLUS_ApplicationMigrationRuntimeActivationConfigPath to the directory that this cmd file lives in
:: and the directory contains a powershell.exe.activation_config file which matches the executable name powershell.exe
set COMPLUS_ApplicationMigrationRuntimeActivationConfigPath=%~dp0
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe %*
set COMPLUS_ApplicationMigrationRuntimeActivationConfigPath=

यह आपको .NET 4.0 के अंतर्गत चल रहे पावरहेल कंसोल का एक उदाहरण लॉन्च करने की अनुमति देगा।

आप मेरे सिस्टम पर अंतर देख सकते हैं जहां मेरे पास cmd से चलने वाले निम्नलिखित दो आदेशों के आउटपुट की जांच करके PowerShell 2.0 है।

C:\>powershell -ExecutionPolicy ByPass -Command $PSVersionTable

Name                           Value
----                           -----
CLRVersion                     2.0.50727.5485
BuildVersion                   6.1.7601.17514
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1


C:\>powershell4.cmd -ExecutionPolicy ByPass -Command $PSVersionTable

Name                           Value
----                           -----
PSVersion                      2.0
PSCompatibleVersions           {1.0, 2.0}
BuildVersion                   6.1.7601.17514
CLRVersion                     4.0.30319.18408
WSManStackVersion              2.0
PSRemotingProtocolVersion      2.1
SerializationVersion           1.1.0.1



यदि आपको केवल .NET 4 में एक कमांड, स्क्रिप्ट ब्लॉक या स्क्रिप्ट फ़ाइल निष्पादित करने की आवश्यकता है, तो सीएलआर के संस्करण 4 का उपयोग करके PowerShell के केवल एक उदाहरण को शुरू करने के लिए .NET 4 से सक्रियण कॉन्फ़िगरेशन फ़ाइलों का उपयोग करने का प्रयास करें।

पूरा ब्योरा:

http://blog.codeassassin.com/2011/03/23/executing-individual-powershell-commands-using-net-4/

एक उदाहरण PowerShell मॉड्यूल:

https://gist.github.com/882528




दरअसल, आप अन्य .NET अनुप्रयोगों को प्रभावित किए बिना .NET 4 का उपयोग करके चलाने के लिए PowerShell प्राप्त कर सकते हैं। मुझे नई HttpWebRequest "होस्ट" प्रॉपर्टी का उपयोग करने के लिए ऐसा करने की ज़रूरत है, हालांकि "OnlyUseLatestCLR" को बदलने से फिडलर टूट गया क्योंकि इसका उपयोग .NET 4 के तहत नहीं किया जा सका।

PowerShell के डेवलपर्स ने स्पष्ट रूप से यह हो रहा है, और उन्होंने फ्रेमवर्क के किस संस्करण का उपयोग करना चाहिए, यह निर्दिष्ट करने के लिए एक रजिस्ट्री कुंजी जोड़ा। एक मामूली मुद्दा यह है कि इसे बदलने से पहले आपको रजिस्ट्री कुंजी का स्वामित्व लेने की आवश्यकता है, क्योंकि प्रशासकों के पास पहुंच नहीं है।

  • HKLM: \ Software \ Microsoft \ PowerSll \ 1 \ PowerShellEngine \ RuntimeVersion (64 बिट और 32 बिट)
  • HKLM: \ Software \ Wow6432Node \ Microsoft \ PowerSll \ 1 \ PowerShellEngine \ RuntimeVersion (64 बिट मशीन पर 32 बिट)

उस कुंजी के मान को आवश्यक संस्करण में बदलें। ध्यान रखें कि कुछ स्नैपिन अब लोड नहीं हो सकते हैं जब तक वे .NET 4 संगत नहीं होते हैं (डब्ल्यूएएसपी केवल एक ही है जिसके साथ मुझे परेशानी होती है, लेकिन मैं वास्तव में इसका उपयोग नहीं करता)। VMWare , एसक्यूएल सर्वर 2008 , पीएससीएक्स, सक्रिय निर्देशिका (माइक्रोसॉफ्ट और क्वेस्ट सॉफ्टवेयर ) और एससीओएम सभी ठीक काम करते हैं।




Links