powershell - पावरशेल का कहना है कि "इस प्रणाली पर स्क्रिप्ट का निष्पादन अक्षम है।"




windows-server-2008-r2 (15)

मैं एक .cmd फ़ाइल चलाने की कोशिश कर रहा हूं जो कमांड प्रॉम्प्ट से PowerShell स्क्रिप्ट को कॉल करता है, और मुझे निम्न त्रुटि मिल रही है:

Management_Install.ps1 लोड नहीं किया जा सकता क्योंकि स्क्रिप्ट का निष्पादन इस सिस्टम पर अक्षम है।

मैंने set-executionpolicy unrestricted और जब मैं get-executionpolicy से get-executionpolicy चलाता हूं तो मुझे unrestricted वापस मिलता है।

// पावरहेल से आउटपुट

पीएस सी: \ उपयोगकर्ता \ प्रशासक> get-executionpolicy

अप्रतिबंधित

// डॉस से आउटपुट

सी: \ प्रोजेक्ट्स \ माइक्रोसॉफ्ट.प्रैक्टिस.ईएसबी \ स्रोत \ नमूने \ प्रबंधन पोर्टल \ स्थापित \ एसआरआर

ipts> powerhell। \ management_Install.ps1 1

चेतावनी: x86 पावरशेल चल रहा है ...

फ़ाइल सी: \ प्रोजेक्ट्स \ माइक्रोसॉफ्ट.प्रैक्टिस.ईएसबी \ स्रोत \ नमूने \ प्रबंधन पोर्टल \ स्थापित करें \ स्क्रिप्ट \ Management_Install.ps1 लोड नहीं किया जा सकता क्योंकि स्क्रिप्ट का निष्पादन इस सिस्टम पर अक्षम है। कृपया अधिक जानकारी के लिए "get-help about_signing" देखें।

लाइन पर: 1 char: 25

  • \ Management_Install.ps1 <<<< 1

    • श्रेणीइन्फो: निर्दिष्ट नहीं किया गया: (:) [], PSSecurityException

    • FullyQualifiedErrorId: RuntimeException

सी: \ प्रोजेक्ट्स \ माइक्रोसॉफ्ट.प्रैक्टिस.ईएसबी \ स्रोत \ नमूने \ प्रबंधन पोर्टल \ स्थापित करें \ स्क्रिप्ट> रोकें

जारी रखने के लिए किसी भी कुंजी को दबाएं । । ।

सिस्टम विंडोज सर्वर 2008 आर 2 है।

मैं क्या गलत कर रहा हूं?


  1. व्यवस्थापक के रूप में ओपन पावरशेल और सेट-एक्जिक्यूशन पॉलिसी -स्कोप CurrentUser चलाएं
  2. रिमोटसाइन प्रदान करें और एंटर दबाएं
  3. रन सेट-निष्पादन पॉलिसी -स्कोप CurrentUser चलाएं
  4. अप्रतिबंधित प्रदान करें और एंटर दबाएं

PowerShell 2.0 में, निष्पादन नीति डिफ़ॉल्ट रूप से अक्षम करने के लिए सेट की गई थी।

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

अपने मामले में, PowerShell कंसोल से Set-ExecutionPolicy RemoteSigned टाइप Set-ExecutionPolicy RemoteSigned और हाँ कहें।


अधिकांश मौजूदा उत्तरों कैसे बताते हैं, लेकिन बहुत कम क्यों समझाते हैं। और इससे पहले कि आप इंटरनेट पर अजनबियों से कोड निष्पादित करने से पहले, विशेष रूप से कोड जो सुरक्षा उपायों को अक्षम करता है, आपको समझना चाहिए कि आप क्या कर रहे हैं। तो यहां इस समस्या पर थोड़ा और विस्तार है।

टेकनेट से निष्पादन नीतियों के बारे में पृष्ठ :

Windows PowerShell निष्पादन नीतियां आपको उन स्थितियों को निर्धारित करने देती हैं जिनके तहत Windows PowerShell कॉन्फ़िगरेशन फ़ाइलों को लोड करता है और स्क्रिप्ट चलाता है।

जिनके लाभ पावरशेल मूल बातें - निष्पादन नीति और कोड हस्ताक्षर द्वारा समझा गया है , वे हैं:

  • निष्पादन का नियंत्रण - स्क्रिप्ट निष्पादित करने के लिए ट्रस्ट के स्तर को नियंत्रित करें।
  • कमांड हाईजैक - मेरे पथ में कमांड का इंजेक्शन रोकें।
  • पहचान - क्या एक डेवलपर I ट्रस्ट द्वारा हस्ताक्षरित और हस्ताक्षरित एक डेवलपर I ट्रस्ट द्वारा हस्ताक्षरित और हस्ताक्षरित स्क्रिप्ट है।
  • ईमानदारी - मैलवेयर या दुर्भावनापूर्ण उपयोगकर्ता द्वारा लिपियों को संशोधित नहीं किया जा सकता है।

अपनी वर्तमान निष्पादन नीति की जांच करने के लिए, आप Get-ExecutionPolicy चला सकते हैं। लेकिन आप शायद यहां हैं क्योंकि आप इसे बदलना चाहते हैं।

ऐसा करने के लिए आप Set-ExecutionPolicy पॉलिसी cmdlet चलाएंगे।

निष्पादन नीति को अपडेट करते समय आपके पास दो प्रमुख निर्णय होंगे।

निष्पादन नीति प्रकार:

  • Restricted - कोई स्क्रिप्ट या तो स्थानीय, दूरस्थ या डाउनलोड सिस्टम पर निष्पादित किया जा सकता है।
  • AllSigned - चलाए गए सभी स्क्रिप्ट को डिजिटल हस्ताक्षर करने की आवश्यकता है।
  • RemoteSigned - सभी रिमोट स्क्रिप्ट (यूएनसी) या डाउनलोड किए जाने की आवश्यकता है।
  • Unrestricted - किसी भी प्रकार की स्क्रिप्ट के लिए कोई हस्ताक्षर आवश्यक नहीं है।

नए परिवर्तन का दायरा

  • LocalMachine - निष्पादन नीति कंप्यूटर के सभी उपयोगकर्ताओं को प्रभावित करती है।
  • CurrentUser - निष्पादन नीति केवल वर्तमान उपयोगकर्ता को प्रभावित करती है।
  • Process - निष्पादन नीति केवल वर्तमान Windows PowerShell प्रक्रिया को प्रभावित करती है।

† = डिफ़ॉल्ट

उदाहरण के लिए : यदि आप केवल CurrentUser के लिए RemoteSigned पर नीति को बदलना चाहते हैं, तो आप निम्न आदेश चलाएंगे:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

नोट : निष्पादन नीति को बदलने के लिए, आपको PowerShell को Adminstrator के रूप में चलाना होगा। यदि आप नियमित मोड में हैं और निष्पादन नीति को बदलने का प्रयास करते हैं, तो आपको निम्न त्रुटि मिल जाएगी:

रजिस्ट्री कुंजी 'HKEY_LOCAL_MACHINE \ सॉफ़्टवेयर \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell' तक पहुंच अस्वीकार कर दी गई है। डिफ़ॉल्ट (LocalMachine) दायरे के लिए निष्पादन नीति को बदलने के लिए, "Power ashe व्यवस्थापक" विकल्प के साथ Windows PowerShell प्रारंभ करें।

यदि आप अपनी स्क्रिप्ट पर आंतरिक प्रतिबंधों को कसना चाहते हैं जिन्हें इंटरनेट से डाउनलोड नहीं किया गया है (या कम से कम यूएनसी मेटाडेटा नहीं है), तो आप पॉलिसी को केवल हस्ताक्षरित स्क्रिप्ट चलाने के लिए मजबूर कर सकते हैं। अपनी स्क्रिप्ट पर हस्ताक्षर करने के लिए, आप पॉवरशेल स्क्रिप्ट्स पर हस्ताक्षर करने पर स्कॉट हंसेलमैन के आलेख के निर्देशों का पालन कर सकते हैं।

नोट : जब भी वे पावरहेल खोलते हैं तो अधिकांश लोगों को यह त्रुटि मिल सकती है क्योंकि पहली चीज पीएस लॉन्च होने पर करने की कोशिश करती है, जो आपके उपयोगकर्ता प्रोफाइल स्क्रिप्ट को निष्पादित करती है जो आपके पर्यावरण को सेट करती है, हालांकि आपको यह पसंद है।

फ़ाइल आमतौर पर स्थित है:

%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

आप powerhell चर चलाकर सही स्थान पा सकते हैं

$profile

यदि प्रोफ़ाइल में आपकी कोई भी चीज़ नहीं है, और आप अपनी सुरक्षा सेटिंग्स से परेशान नहीं होना चाहते हैं, तो आप इसे हटा सकते हैं और पावरहेल को कुछ भी नहीं मिलेगा जो इसे निष्पादित नहीं कर सकता है।


आप निम्न आदेश का उपयोग कर इसे बाईपास भी कर सकते हैं:

PS > powershell Get-Content .\test.ps1 | Invoke-Expression

आप स्कॉट सटरलैंड द्वारा इस आलेख को भी पढ़ सकते हैं जो पावरहेल सेट-निष्पादन नीति को बाईपास करने के 15 अलग-अलग तरीकों को बताता है यदि आपके पास व्यवस्थापकीय विशेषाधिकार नहीं हैं।

https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/


जीत + आर और टाइप कॉपी पिछले आदेश और ठीक दबाएं

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

और अपनी स्क्रिप्ट निष्पादित करें

फिर जैसे परिवर्तनों को वापस करें

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"


निष्पादन नीति सेट करना पर्यावरण-विशिष्ट है। यदि आप चल रहे x86 ISE से किसी स्क्रिप्ट को निष्पादित करने का प्रयास कर रहे हैं तो आपको निष्पादन नीति सेट करने के लिए x86 PowerShell का उपयोग करना होगा। इसी तरह, यदि आप 64-बिट आईएसई चला रहे हैं तो आपको पॉलिसी को 64-बिट पावरशेल के साथ सेट करना होगा।


पावरहेल को व्यवस्थापक के रूप में खोलें। यह काम करेगा


मुझे आज भी यही समस्या थी। 64-बिट निष्पादन नीति अप्रतिबंधित थी, जबकि 32-बिट प्रतिबंधित थी।

यहां 32-बिट नीति को दूरस्थ रूप से बदलने का तरीका बताया गया है:

Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}

मैं विंडोज 10 का उपयोग कर रहा हूं और कोई भी आदेश चलाने में असमर्थ था। एकमात्र आदेश जिसने मुझे कुछ संकेत दिए थे:

[64]

  1. ओपन सी: \ विंडोज \ SysWOW64 \ cmd.exe [व्यवस्थापक के रूप में]
  2. आदेश चलाएं> पावरहेल सेट-निष्पादन पॉलिसी अप्रतिबंधित

लेकिन यह काम नहीं किया। यह सीमित था। विंडोज 10 के लिए शायद नई सुरक्षा नीतियां। मुझे यह त्रुटि थी:

सेट-निष्पादन नीति: Windows PowerShell ने आपकी निष्पादन नीति सफलतापूर्वक अपडेट की है, लेकिन सेटिंग को एक अधिक विशिष्ट दायरे में परिभाषित नीति द्वारा ओवरराइड किया गया है। ओवरराइड के कारण, आपका खोल इसकी वर्तमान प्रभावी निष्पादन नीति बनाए रखेगा ...

तो मुझे एक और तरीका मिला ( समाधान ):

  1. ओपन रन कमांड / कंसोल ( विन + आर )
  2. टाइप करें: gpedit.msc ( समूह नीति संपादक)
  3. स्थानीय कंप्यूटर नीति पर ब्राउज़ करें -> कंप्यूटर कॉन्फ़िगरेशन -> व्यवस्थापकीय टेम्पलेट्स -> विंडोज घटक -> विंडोज पावरहेल
  4. " स्क्रिप्ट निष्पादन चालू करें" सक्षम करें
  5. आवश्यकतानुसार पॉलिसी सेट करें। मैंने " सभी स्क्रिप्ट को अनुमति दें " पर सेट किया है।

अब पावरशेल खोलें और आनंद लें;)


मैंने पाया कि यह लाइन मेरे विंडोज सर्वर 2008 आर 2 सर्वरों में से एक के लिए सबसे अच्छा काम करती है। मेरी पावरशेल स्क्रिप्ट में इस पंक्ति के बिना कुछ अन्य लोगों के पास कोई समस्या नहीं थी:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process

यदि आप Windows Server 2008 R2 का उपयोग कर रहे हैं तो PowerShell का x64 और x86 संस्करण है, जिनमें से दोनों को निष्पादन नीतियां सेट करनी होंगी। क्या आपने दोनों होस्टों पर निष्पादन नीति सेट की है?

एक प्रशासक के रूप में, आप इसे अपनी PowerShell विंडो में टाइप करके निष्पादन नीति सेट कर सकते हैं:

Set-ExecutionPolicy RemoteSigned

अधिक जानकारी के लिए, सेट-एक्जिक्यूशन पॉलिसी सीएमडीलेट का उपयोग करना देखें।


यदि आप ऐसे माहौल में हैं जहां आप व्यवस्थापक नहीं हैं, तो आप केवल आपके लिए निष्पादन नीति सेट कर सकते हैं, और इसके लिए व्यवस्थापक की आवश्यकता नहीं होगी।

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

या

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"

आप सहायता प्रविष्टि में इसके बारे में सब कुछ पढ़ सकते हैं।

Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full

रिमोटसाइन: आपके द्वारा बनाई गई सभी स्क्रिप्ट्स चलाए जाएंगी, और इंटरनेट से डाउनलोड की गई सभी स्क्रिप्ट को एक विश्वसनीय प्रकाशक द्वारा हस्ताक्षरित करने की आवश्यकता होगी।

ठीक है, बस टाइप करके नीति बदलें:

Set-ExecutionPolicy RemoteSigned

विंडोज 7 में:

स्टार्ट मेनू पर जाएं और "विंडोज पावरशेल आईएसई" के लिए खोजें।

X86 संस्करण पर राइट क्लिक करें और "व्यवस्थापक के रूप में चलाएं" चुनें।

शीर्ष भाग में, Set-ExecutionPolicy RemoteSigned पेस्ट Set-ExecutionPolicy RemoteSigned ; स्क्रिप्ट चलाओ। "हां" चुनें।

पावरहेल आईएसई के 64-बिट संस्करण (गैर x86 संस्करण) के लिए इन चरणों को दोहराएं।

मैं बस उन चरणों को स्पष्ट कर रहा हूं जो @ चाड मिलर ने संकेत दिया था। धन्यवाद चाड!


हम नीचे दिए गए आदेश से वर्तमान निष्पादन नीति की स्थिति प्राप्त कर सकते हैं:

Get-ExecutionPolicy;

डिफ़ॉल्ट रूप से यह प्रतिबंधित है । पावरशेल स्क्रिप्ट्स के निष्पादन की अनुमति देने के लिए हमें इस निष्पादन नीति को बाईपास या अप्रतिबंधित के रूप में सेट करने की आवश्यकता है।

हम मौजूदा उपयोगकर्ता के लिए नीति को नीचे दिए गए किसी भी PowerShell कमांड का उपयोग करके Bypass या Unrestricted रूप में सेट कर सकते हैं:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

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

जबकि बाईपास नीति में, कुछ भी अवरुद्ध नहीं है और स्क्रिप्ट निष्पादन के दौरान कोई चेतावनी या संकेत नहीं हैं। बाईपास निष्पादन पॉलिसी अप्रतिबंधित से अधिक आराम से है।





windows-server-2008-r2