PowerShell स्क्रिप्ट के निष्पादन को कैसे सक्षम करें?


260

जब मैं अपनी PowerShell स्क्रिप्ट निष्पादित करने का प्रयास करता हूं तो मुझे यह त्रुटि मिलती है:

फ़ाइल C: \ Common \ Scripts \ hello.ps1 को लोड नहीं किया जा सकता क्योंकि स्क्रिप्ट का निष्पादन इस सिस्टम पर अक्षम है। अधिक जानकारी के लिए कृपया "get-help about_signing" देखें।
लाइन में: 1 char: 13
+। \ Hello.ps1 <<<<
+ श्रेणीइन्फो: अधिसूचित: (:) [], PSSecurityException
+ FullQualifiedErrorId: RuntimeException

जवाबों:


399
  1. "व्यवस्थापक के रूप में चलाएँ" विकल्प के साथ Windows PowerShell प्रारंभ करें। कंप्यूटर पर केवल व्यवस्थापक समूह के सदस्य ही निष्पादन नीति को बदल सकते हैं।

  2. प्रवेश करके अहस्ताक्षरित स्क्रिप्ट चलाने में सक्षम करें:

    set-executionpolicy remotesigned
    

यह बिना स्क्रिप्ट के चलने की अनुमति देगा जो आप अपने स्थानीय कंप्यूटर पर लिखते हैं और इंटरनेट से स्क्रिप्ट पर हस्ताक्षर करते हैं।

Microsoft TechNet लाइब्रेरी में रनिंग स्क्रिप्ट भी देखें ।


3
क्या यह नीति स्थायी रूप से बदल जाएगी या क्या मुझे हर बार अपने कंप्यूटर को पुनरारंभ करने के लिए यह करना होगा?
रे

1
@ यह नीति स्थायी रूप से बदल जाएगी।
पावेल चुचुवा

1
@ रे प्रलेखन देखें । डिफ़ॉल्ट रूप से, यह इसके लिए सेट करता है LocalMachine। अन्य स्कोप ( CurrentUserया Process) के लिए सेट करने के लिए , -Scopeस्पष्ट रूप से पास करें ।
jpmc26

@PavelChuchuva मुझे अपनी स्क्रिप्ट के शीर्ष पर इस पंक्ति को जोड़ना चाहिए जिसका मतलब है
FabioSpaghetti

@FabioSpaghetti को अपनी स्क्रिप्ट में कुछ भी जोड़ने की आवश्यकता नहीं है। बस चरणों का पालन करके एक बार उस कमांड को निष्पादित करें।
पावेल चुचुवा

74

डिफ़ॉल्ट निष्पादन नीति प्रतिबंधित है, आप इसे टाइप करके देख सकते हैं:

Get-ExecutionPolicy

अप्रतिबंधित मोड पर जाने के लिए आपको निम्नलिखित टाइप करना चाहिए:

Set-ExecutionPolicy unrestricted

उम्मीद है की यह मदद करेगा


13
यदि आपको उपयोगकर्ता को इंटरनेट से दुर्भावनापूर्ण स्क्रिप्ट को कॉपी और पेस्ट करने की अपेक्षा है, तो हस्ताक्षर करने की आवश्यकता समझ में आती है। यदि आप मानते हैं कि उपयोगकर्ता बेवकूफ नहीं है, तो "रीमोसिग्न्ट" किसी भी सुरक्षा को नहीं जोड़ता है और जीवन को कठिन बनाता है।
Guss

@Guss: यह परीक्षण करने पर मैंने पाया कि RemoteSign को अब स्थानीय रूप से उत्पन्न .ps1 फ़ाइलों पर हस्ताक्षर करने की आवश्यकता नहीं है, और यह स्थानीय स्रोत के रूप में git स्रोत नियंत्रण को मानता है।
जोशुआ

@ जोशुआ - हां, बिल्कुल मेरी बात। यदि RemoteSignedकॉपी और पेस्ट को ब्लॉक नहीं करता है, तो गिट या अन्य गैर-IE डाउनलोड विधियों को ब्लॉक नहीं करता है, तो यह किसके लिए अच्छा है? इसे मेरे साथ कहो: "बिल्कुल कुछ भी नहीं!"। मुझे लगता है कि स्क्रिप्ट की आवश्यकता $ 100 कोड के साथ हस्ताक्षर किए जाने पर हस्ताक्षर करने का प्रमाण पत्र बेकार है, बेवकूफ है और सभी अच्छे को नकारता है जो एक सभ्य स्क्रिप्टिंग भाषा विंडोज के लिए कर सकती है। कहा जा रहा है, अगर आगे रास्ता उपयोगकर्ताओं को यह समझने के लिए है कि वे पीएस स्क्रिप्ट का उपयोग करने के लिए क्या कर रहे हैं, तो हम बहुत अधिक sth पर हो सकते हैं ... नाह्, यह कभी काम नहीं करेगा; ;-)
Guss

@Guss: मुझे पहले से ही विंडोज पर एक अच्छी स्क्रिप्टिंग भाषा मिल गई है। Cygwin विंडोज 10 पर शानदार काम करता है; सचमुच विंडोज के किसी भी पूर्व संस्करण की तुलना में बहुत बेहतर है। मैं केवल कभी-कभी किसी और को पहले से ही लिखे गए लेखों को चलाना चाहता हूं।
जोशुआ

61

अपनी मशीन पर जिसका उपयोग मैं स्क्रिप्ट्स के लिए करता हूं, मैं -unrestricted को ऊपर की तरह उपयोग करूंगा। हालांकि, अपनी स्क्रिप्ट को अंतिम उपयोगकर्ता मशीन पर तैनात करते समय, मैं केवल -executionpolicy स्विच के साथ शक्तियां कॉल करूंगा:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1

2
आप इस ट्रिक को एक .CMD फ़ाइल में पॉलीग्लॉट ट्रिक के साथ जोड़ना चाह सकते हैं। देखें stackoverflow.com/a/8597794/5314
जय बज़ुजी

अच्छा! मैं sfx के winrar rarlabs.com
MDMoore313

1
इस ट्रिक ने मुझे Git Bash (MINGW32 bash) से काम करने वाली स्क्रिप्ट चलाने की अनुमति दी
Kamil Szot

16

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

Get-ExecutionPolicy;

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

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

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

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

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

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


5

Windows संस्करण और कॉन्फ़िगरेशन के आधार पर, आपके पास निम्न चेतावनी हो सकती है, यहां तक ​​कि Unrestrictedमोड में भी :

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this
script can potentially harm your computer. If you trust this script, use the 
Unblock-File cmdlet to allow the script to run without this warning message. 
Do you want to run?
[D] Do not run  [R] Run once  [S] Suspend  [?] Help (default is "D")

समाधान "बायपास" नीति का उपयोग करना है, जो निम्न कमांड के साथ सक्षम है:

Set-ExecutionPolicy Bypass

से प्रलेखन :

बाईपास: कुछ भी अवरुद्ध नहीं है और कोई चेतावनी या संकेत नहीं हैं।

यह स्पष्ट रूप से असुरक्षित है, कृपया इसमें शामिल जोखिमों को समझें।


यह एकमात्र ऐसा तरीका था जिससे मैं अपनी स्क्रिप्ट को WINE के वातावरण में चलाने में सक्षम हो गया था जिसमें 2.0 शक्तियां थीं। धन्यवाद।
व्याट8740

@ Wyatt8740: क्योंकि वाइन सभी ड्राइव को नेटवर्क ड्राइव के रूप में प्रस्तुत करती है।
जोशुआ

@ जोशुआ मुझे कोई पता नहीं था। क्या आप मुझे उस कथन के लिए एक स्रोत दे सकते हैं? मैं एक आकस्मिक गूगल की कोशिश की, लेकिन मैं स्पष्ट रूप से गलत देख रहा हूँ।
व्याट8740

@ व्याट8740: स्रोत: वाइन ओपनफिल्म सामान्य संवाद बॉक्स। ड्राइव आइकन देखें।
जोशुआ

@ जोशुआ मेरा मतलब एक सोर्स कोड सोर्स था; प्रतीक संभवतः मनमाने हैं। लेकिन मैंने ऐसा नहीं सोचा था; मुझे लगता है कि शुरू करने के लिए यह एक अच्छी जगह है (संपादित करें: ऐसा नहीं लगता कि वे यहां हैं ।)
व्याट8740

2

के साथ एक reg कुंजी:
Windows रजिस्ट्री संपादक संस्करण 5.00

[HK तक

तथा:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

वास्तव में भी काम करता है।


1

किसी कारण से PowerShell cmdlet ने स्थानीय रूप से स्थानीय निष्पादन को सक्षम नहीं किया, केवल स्थानीय उपयोगकर्ता संदर्भ के लिए। अगर मैंने साइग्विन के बैश प्रॉम्प्ट के अंदर से पॉवरशेल स्क्रिप्ट शुरू करने की कोशिश की, उदाहरण के लिए, जो अपने स्वयं के उपयोगकर्ता संदर्भ के तहत चलता है, तो यह "डिजिटल रूप से हस्ताक्षरित नहीं है" त्रुटि देते हुए नहीं चलेगा। इसका जवाब स्थानीय समूह नीति संपादक -> स्थानीय कंप्यूटर नीति -> प्रशासनिक टेम्पलेट -> विंडोज घटकों -> विंडोज पॉवरशेल में जाकर 'टर्न ऑन स्क्रिप्ट एक्जिक्यूशन' पर क्लिक करना था। इसके बाद मैंने इसे 'सक्षम' में बदल दिया और फिर "स्थानीय स्क्रिप्ट और दूरस्थ हस्ताक्षरित स्क्रिप्ट की निष्पादन नीति" को क्रियान्वित किया और यह उपयोगकर्ता संदर्भ के बावजूद विश्व स्तर पर काम करता है।


0

स्वीकृत उत्तर सही है, लेकिन नीति संशोधन केवल पॉवर्सशेल के वर्तमान में चल रहे उदाहरण के लिए उपलब्ध है, जिसका अर्थ है कि एक बार पॉवर्सशेल का उदाहरण बंद हो गया है। नीति रीसेट हो जाएगी। यदि कोई उपयोगकर्ता Powershell का दूसरा उदाहरण फिर से खोलता है, तो डिफ़ॉल्ट नीति लागू की जाएगी जो कि हैRestricted

मेरे लिए, चीजों को बनाने के लिए मुझे cygwin से VisualStudio कोड कंसोल और g ++ का उपयोग करना होगा। कंसोल Powershell का उपयोग कर रहा है, डिफ़ॉल्ट नीति के साथ, कुछ भी नहीं किया जा सकता है। एक समाधान पॉलिसी को हर बार बदल रहा है कंसोल को VisualStudio कोड कंसोल में निकाल दिया जाता है, शायद पॉलिसी बदलने की स्क्रिप्ट।

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

set-executionpolicy remotesigned -Scope CurrentUser


0

पॉलिसी सेट करना (सही तरीके से) सबसे अच्छा विकल्प है लेकिन मेरे प्रबंधित सिस्टम पर मेरे पास उस पॉलिसी को बदलने की क्षमता नहीं है।

मेरे लिए, नीति को बदलने का सबसे सरल कार्य "पॉवरशेल आईएसई" में स्क्रिप्ट को खोलना है , निष्पादित करने के लिए कोड (या कोड का हिस्सा) पर प्रकाश डालें और फिर "रन चयन" बटन पर क्लिक करें (या F8 का उपयोग करें) छोटा रास्ता)।

यह सबसे अच्छा समाधान नहीं है और कार्यों को स्वचालित करने के लिए बहुत कम है, लेकिन यह मुझे अपने आईएस विभाग से दूर नहीं चलने के दौरान पावरशेल के उपयोग और उपयोगिता की अनुमति देता है।


-2

कारण है कि reg कुंजी काम करता है, क्योंकि यह वही कर रहा है जो PS कमांड करता है। आदेश reg कुंजियों में परिवर्तन लिखते हैं। रेग कुंजी एक रजिस्ट्री कुंजी बनाने या रजिस्ट्री में खुदाई करने की तुलना में बहुत तेज और आसान है।


1
यह सिर्फ गलत है: अन्य उत्तरों में जिन कुंजियों का उल्लेख किया गया था, वे पॉवरशेल्स निष्पादन नीति को बदलते हैं, जो तब पॉवरशेल स्क्रिप्ट को चलाने में सक्षम बनाता है।
पैट्रिक आर।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.