डिफ़ॉल्ट रूप से, Windows सेटिंग्स PowerShell स्क्रिप्ट को चलने से रोकती हैं। सुरक्षा के दृष्टिकोण से, अविश्वसनीय और दुर्भावनापूर्ण कोड को PowerShell स्क्रिप्ट से चलने से प्रतिबंधित करना महत्वपूर्ण है। निष्पादन नीति पावरशेल स्क्रिप्ट चलाने के लिए सेटिंग्स निर्धारित करती है। इस लेख में हम विंडोज़ पर पीएस स्क्रिप्ट चलाने के लिए उपलब्ध सेटिंग्स देखेंगे, निष्पादन नीति कैसे बदलें और जीपीओ का उपयोग कर डोमेन कंप्यूटरों के लिए पावरशेल स्क्रिप्ट निष्पादन नीतियों को कॉन्फ़िगर करें।
इस सिस्टम पर पावरशेल स्क्रिप्ट चलाना अक्षम है
स्वच्छ Windows 10 पर किसी भी PowerShell स्क्रिप्ट (एक PS1 फ़ाइल) को चलाने का प्रयास करते समय, निम्न त्रुटि उत्पन्न होती है:
File C:\ps\script.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170. + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccessपर about_Execution_Policies देखें।
आप निम्न आदेश का उपयोग करके विंडोज़ में पावरशेल स्क्रिप्ट निष्पादन नीति के लिए वर्तमान सेटिंग्स प्राप्त कर सकते हैं:
Get-ExecutionPolicy
निम्नलिखित पावरशेल निष्पादन नीति मान उपलब्ध हैं:
- प्रतिबंधित - पावरशेल स्क्रिप्ट चलाना अक्षम है, आप पीएस कंसोल में केवल इंटरैक्टिव कमांड निष्पादित कर सकते हैं;
- सभी हस्ताक्षरित - केवल एक विश्वसनीय प्रकाशक द्वारा डिजिटल हस्ताक्षर के साथ हस्ताक्षरित PS स्क्रिप्ट की अनुमति है (आप एक स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग करके एक स्क्रिप्ट पर हस्ताक्षर कर सकते हैं और इसे विश्वसनीय रूट प्रमाणपत्र में जोड़ सकते हैं)। अविश्वसनीय स्क्रिप्ट चलाते समय, निम्न चेतावनी दिखाई देती है:
Do you want to run software from this untrusted publisher? File .ps1 is published by CN=test1 and is not trusted on your system. Only run scripts from trusted publishers.
- RemoteSigned - आप बिना किसी प्रतिबंध के स्थानीय पावरशेल स्क्रिप्ट चला सकते हैं। आप एक डिजिटल हस्ताक्षर के साथ दूरस्थ PS फ़ाइलें चला सकते हैं (आप इंटरनेट से डाउनलोड की गई PS1 फ़ाइलों को नहीं चला सकते हैं या UNC पथ के माध्यम से साझा नेटवर्क फ़ोल्डर से लॉन्च नहीं कर सकते हैं);
- अप्रतिबंधित - सभी पावरशेल स्क्रिप्ट को चलने की अनुमति है; तृतीय-पक्ष PowerShell स्क्रिप्ट चलाने का प्रयास करते समय, आपको लॉन्च की पुष्टि करने के लिए कहा जा सकता है (नीचे देखें)।
- बाईपास - किसी भी पीएस फाइल को चलाने की अनुमति है (कोई चेतावनी प्रदर्शित नहीं होती है)। नीति का उपयोग आमतौर पर बिना कोई सूचना प्रदर्शित किए PS स्क्रिप्ट को स्वचालित रूप से चलाने के लिए किया जाता है (उदाहरण के लिए, जब स्क्रिप्ट GPO, SCCM, कार्य शेड्यूलर, आदि के माध्यम से चलाई जाती हैं) और स्थायी उपयोग के लिए अनुशंसित नहीं है;
- डिफ़ॉल्ट - पावरशेल स्क्रिप्ट निष्पादन सेटिंग्स को डिफ़ॉल्ट पर रीसेट करता है; Windows 10 . पर PowerShell निष्पादन नीति के लिए डिफ़ॉल्ट मान प्रतिबंधित है , और Windows सर्वर 2016 . पर यह RemoteSigned . है .
- अपरिभाषित - नीति निर्धारित नहीं है। प्रतिबंधित नीति डेस्कटॉप OS और सर्वर वाले RemoteSign पर लागू होती है।
निष्पादन नीति का उपयोग करके PowerShell को स्क्रिप्ट चलाने की अनुमति कैसे दें?
PowerShell स्क्रिप्ट निष्पादन नीति के वर्तमान मान को बदलने के लिए, सेट-निष्पादन नीति cmdlet का उपयोग किया जाता है।
उदाहरण के लिए, आइए स्थानीय PS स्क्रिप्ट फ़ाइलों को चलाने की अनुमति दें:
Set-ExecutionPolicy RemoteSigned
Y
. दबाकर PS1 स्क्रिप्ट के लिए निष्पादन नीति बदलने की पुष्टि करें या A
।
पुष्टिकरण संकेत दिखाने से बचने के लिए, आप बल . का उपयोग कर सकते हैं पैरामीटर।
Set-ExecutionPolicy RemoteSigned –Force
यदि आपने PowerShell निष्पादन नीति का मान अप्रतिबंधित . पर सेट किया है , यूएनसी पथों या इंटरनेट से डाउनलोड की गई फ़ाइलों द्वारा साझा फ़ोल्डरों से दूरस्थ स्क्रिप्ट चलाने का प्रयास करते समय भी आपको संकेत दिखाई देगा:
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")
कैसे PowerShell स्थानीय और दूरस्थ स्क्रिप्ट के बीच अंतर करता है? यह
ZoneId
. के कारण है एक फ़ाइल डाउनलोड करते समय ब्राउज़र वैकल्पिक स्ट्रीम में पहचानकर्ता सेट करता है (लेख देखें कि विंडोज़ कैसे जानता है कि कोई फ़ाइल इंटरनेट से डाउनलोड की गई थी?) आप अनब्लॉक . को चेक करके फ़ाइल को अनब्लॉक कर सकते हैं फ़ाइल गुणों में या Unblock-File
. का उपयोग करके ज़ोन लेबल साफ़ करें सीएमडीलेट। आपको पावरशेल निष्पादन नीति के विभिन्न क्षेत्रों के बीच भी अंतर करना चाहिए:
- मशीन नीति - GPO का उपयोग करके सेट किया गया है और कंप्यूटर के सभी उपयोगकर्ताओं पर लागू होता है;
- उपयोगकर्ता नीति - जीपीओ का उपयोग करके भी सेट किया गया है और कंप्यूटर उपयोगकर्ताओं पर लागू होता है;
- प्रक्रिया - निष्पादन नीति सेटिंग्स केवल वर्तमान पावरशेल सत्र पर लागू होती हैं (और powershell.exe प्रक्रिया समाप्त होने के बाद रीसेट करें);
- वर्तमान उपयोगकर्ता - निष्पादन नीति केवल वर्तमान उपयोगकर्ता पर लागू होती है (HKEY_CURRENT_USER रजिस्ट्री कुंजी का एक पैरामीटर);
- स्थानीय मशीन कंप्यूटर के सभी उपयोगकर्ताओं के लिए एक नीति है (HKEY_LOCAL_MACHINE रजिस्ट्री कुंजी से एक पैरामीटर)।
आप स्कोप . का उपयोग करके नीति का दायरा निर्धारित कर सकते हैं सेट-निष्पादन नीति cmdlet का पैरामीटर। उदाहरण के लिए:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force
आइए सभी क्षेत्रों के लिए वर्तमान निष्पादन नीति सेटिंग्स की जाँच करें:
Get-ExecutionPolicy -List
Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Bypass CurrentUser Undefined LocalMachine RemoteSigned
आपके द्वारा CurrentUser और LocalMachine स्कोप के लिए Set-ExecutionPolicy cmdlet का उपयोग करके सेट किए गए निष्पादन नीति मान रजिस्ट्री में संग्रहीत किए जाते हैं। उदाहरण के लिए, यह कमांड चलाएँ:
Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell रजिस्ट्री कुंजी खोलें और निष्पादन नीति के REG_SZ मान की जांच करें पैरामीटर। इसे प्रतिबंधित में बदलना चाहिए (अनुमत पैरामीटर मान प्रतिबंधित, सभी हस्ताक्षरित, RemoteSigned, Bypass, अप्रतिबंधित हैं और अपरिभाषित)।
CurrentUser स्कोप के लिए समान सेटिंग्स HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell के अंतर्गत स्थित हैं। ।
इसका मतलब है कि आप समूह नीति प्राथमिकताओं का उपयोग करके रजिस्ट्री के माध्यम से पावरशेल स्क्रिप्ट निष्पादन नीति सेटिंग्स को लागू कर सकते हैं।ध्यान दें कि AllSigned . के साथ निष्पादन नीति स्थानीय मशीन स्तर पर मूल्य का उपयोग कॉर्पोरेट वातावरण में सबसे अधिक बार किया जाता है। यह सुरक्षा और सुविधा के बीच सबसे अच्छा संतुलन प्रदान करता है। व्यक्तिगत उपयोग के लिए, आप अपने कंप्यूटर पर RemoteSigned सेटिंग का उपयोग कर सकते हैं। बाईपास नीति का उपयोग केवल कुछ कार्यों को चलाने के लिए किया जा सकता है (उदाहरण के लिए, GPO का उपयोग करके स्क्रिप्ट चलाने के लिए या कार्य शेड्यूलर में कार्य करने के लिए)।
जीपीओ का उपयोग करके सक्रिय निर्देशिका में पावरशेल निष्पादन नीति सेट करें
आप समूह नीतियों का उपयोग करके सक्रिय निर्देशिका डोमेन में सर्वर या डोमेन कंप्यूटर पर पावरशेल स्क्रिप्ट के लिए निष्पादन नीति को कॉन्फ़िगर कर सकते हैं।
- डोमेन GPO संपादक में (
gpmc.msc
), एक नया GPO बनाएं या किसी मौजूदा को संपादित करें और उसे OU वाले कंप्यूटर से लिंक करें, जिस पर आप PowerShell स्क्रिप्ट निष्पादन नीति लागू करना चाहते हैं; - कंप्यूटर खोलें कॉन्फ़िगरेशन -> नीतियां -> व्यवस्थापकीय टेम्पलेट -> Windows घटक -> Windows PowerShell GPO संपादक में और स्क्रिप्ट निष्पादन चालू करें . ढूंढें पैरामीटर। उपयोगकर्ता GPO अनुभाग में समान नीति है - उपयोगकर्ता कॉन्फ़िगरेशन, लेकिन कंप्यूटर नीति की उच्च प्राथमिकता है।
- नीति के तीन मान हो सकते हैं:
- केवल हस्ताक्षरित स्क्रिप्ट की अनुमति दें - AllSigned नीति के अनुरूप
- स्थानीय स्क्रिप्ट और दूरस्थ हस्ताक्षरित स्क्रिप्ट को अनुमति दें - PS RemoteSign की नीति के अनुरूप
- सभी स्क्रिप्ट को अनुमति दें - अप्रतिबंधित नीति के अनुरूप
- अपना इच्छित नीति मान सेट करें, GPO सहेजें और अपने कंप्यूटर पर समूह नीति सेटिंग अपडेट करें;
- सुनिश्चित करें कि नई निष्पादन सेटिंग्स MachinePolicy के दायरे में लागू कर दी गई हैं।
GPO का उपयोग करके निष्पादन नीति को कॉन्फ़िगर करने के बाद, आप स्क्रिप्ट निष्पादन नीति सेटिंग्स को मैन्युअल रूप से बदलने में सक्षम नहीं होंगे। यदि आप उस कंप्यूटर पर निष्पादन नीति सेटिंग बदलने का प्रयास करते हैं जिस पर GPO लागू होता है, तो निम्न त्रुटि प्रकट होती है:
Set-ExecutionPolicy: Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List" to view your execution policy settings.
उसी तरह, आप स्थानीय GPO संपादक - gpedit.msc का उपयोग करके एक स्टैंडअलोन कंप्यूटर पर निष्पादन नीति को कॉन्फ़िगर कर सकते हैं।
Windows पर PowerShell निष्पादन नीति को कैसे बायपास करें?
कुछ तरकीबें हैं जो आपकी मदद कर सकती हैं यदि आप निष्पादन नीति सेटिंग्स को बदले बिना अपने कंप्यूटर पर पावरशेल स्क्रिप्ट चलाना चाहते हैं। उदाहरण के लिए, मैं एक साधारण PS1 स्क्रिप्ट चलाना चाहता हूं जो यह जांचती है कि क्या इसे एक व्यवस्थापक के रूप में चलाया जाता है।
आप Get-Content का उपयोग करके स्क्रिप्ट सामग्री प्राप्त कर सकते हैं और इसे PS कंसोल के मानक इनपुट स्ट्रीम पर रीडायरेक्ट कर सकते हैं।
Get-Content c:\ps\check_process_elevation.ps1 | PowerShell.exe -noprofile –
या आप बायपास नीति के साथ एक नई powershell.exe प्रक्रिया चला सकते हैं:
powershell.exe -noprofile -executionpolicy bypass -file c:\ps\check_process_elevation.ps1