Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रणाली >> Windows Server

PowerShell स्क्रिप्ट एक्जीक्यूशन पॉलिसी कॉन्फ़िगर करना

PowerShell स्क्रिप्ट निष्पादन नीति का परिचय

डिफ़ॉल्ट रूप से, Windows सेटिंग्स PowerShell स्क्रिप्ट को चलाने से रोकती हैं। सुरक्षा की दृष्टि से, PowerShell स्क्रिप्ट से अविश्वसनीय और दुर्भावनापूर्ण कोड को चलाने से रोकना महत्वपूर्ण है। एक्जीक्यूशन पॉलिसी PowerShell स्क्रिप्ट चलाने के लिए सेटिंग्स निर्धारित करती है। इस लेख में हम Windows पर PS स्क्रिप्ट चलाने के लिए उपलब्ध सेटिंग्स, एक्जीक्यूशन पॉलिसी को बदलने और GPO का उपयोग करके डोमेन कंप्यूटरों के लिए 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

आप निम्न कमांड का उपयोग करके Windows में PowerShell स्क्रिप्ट एक्जीक्यूशन पॉलिसी के लिए वर्तमान सेटिंग्स प्राप्त कर सकते हैं:

Get-ExecutionPolicy

उपलब्ध PowerShell एक्जीक्यूशन पॉलिसी मान

  • Restricted - PowerShell स्क्रिप्ट चलाना अक्षम है, आप PS कंसोल में केवल इंटरैक्टिव कमांड निष्पादित कर सकते हैं
  • AllSigned - केवल विश्वसनीय प्रकाशक द्वारा डिजिटल हस्ताक्षर वाली साइन की गई 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 - आप बिना किसी प्रतिबंध के स्थानीय PowerShell स्क्रिप्ट चला सकते हैं। आप डिजिटल हस्ताक्षर के साथ रिमोट PS फाइलें चला सकते हैं (आप इंटरनेट से डाउनलोड की गई PS1 फाइलें या UNC पथ के माध्यम से साझा नेटवर्क फोल्डर से लॉन्च की गई फाइलें नहीं चला सकते)
  • Unrestricted - सभी PowerShell स्क्रिप्ट चलाने की अनुमति है; थर्ड-पार्टी PowerShell स्क्रिप्ट चलाने का प्रयास करते समय, आपको लॉन्च की पुष्टि करने के लिए कहा जा सकता है
  • Bypass - किसी भी PS फाइल को चलाने की अनुमति है (कोई चेतावनी प्रदर्शित नहीं होती)। इस पॉलिसी का उपयोग आमतौर पर PS स्क्रिप्ट को बिना किसी सूचना के स्वचालित रूप से चलाने के लिए किया जाता है (उदाहरण के लिए, जब स्क्रिप्ट GPO, SCCM, टास्क शेड्यूलर आदि के माध्यम से चलाई जाती हैं) और स्थायी उपयोग के लिए अनुशंसित नहीं है
  • Default - PowerShell स्क्रिप्ट निष्पादन सेटिंग्स को डिफ़ॉल्ट पर रीसेट करता है; Windows 10 पर PowerShell एक्जीक्यूशन पॉलिसी का डिफ़ॉल्ट मान Restricted है, और Windows Server 2016 पर यह RemoteSigned है
  • Undefined - पॉलिसी सेट नहीं है। डेस्कटॉप OS के लिए Restricted पॉलिसी लागू होती है और सर्वर के लिए RemoteSigned

एक्जीक्यूशन पॉलिसी का उपयोग करके PowerShell स्क्रिप्ट चलाने की अनुमति कैसे दें?

PowerShell स्क्रिप्ट एक्जीक्यूशन पॉलिसी के वर्तमान मान को बदलने के लिए, Set-ExecutionPolicy cmdlet का उपयोग किया जाता है।

उदाहरण के लिए, स्थानीय PS स्क्रिप्ट फाइलों को चलाने की अनुमति दें:

Set-ExecutionPolicy RemoteSigned

PS1 स्क्रिप्ट के लिए एक्जीक्यूशन पॉलिसी बदलने की पुष्टि करने के लिए Y या A दबाएं।

पुष्टिकरण प्रॉम्प्ट दिखाने से बचने के लिए, आप Force पैरामीटर का उपयोग कर सकते हैं।

Set-ExecutionPolicy RemoteSigned –Force

यदि आप PowerShell एक्जीक्यूशन पॉलिसी का मान Unrestricted पर सेट करते हैं, तो UNC पथ के माध्यम से साझा फोल्डर से रिमोट स्क्रिप्ट या इंटरनेट से डाउनलोड की गई फाइलों को चलाने का प्रयास करते समय आपको अभी भी प्रॉम्प्ट दिखाई देगा:

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 cmdlet का उपयोग करके जोन लेबल को साफ करके फाइल को अनब्लॉक कर सकते हैं।

PowerShell एक्जीक्यूशन पॉलिसी के विभिन्न स्कोप

आपको PowerShell एक्जीक्यूशन पॉलिसी के विभिन्न स्कोप के बीच अंतर करना चाहिए:

  • MachinePolicy - GPO का उपयोग करके सेट किया जाता है और कंप्यूटर के सभी उपयोगकर्ताओं पर लागू होता है
  • UserPolicy - GPO का उपयोग करके भी सेट किया जाता है और कंप्यूटर उपयोगकर्ताओं पर लागू होता है
  • Process - एक्जीक्यूशन पॉलिसी सेटिंग्स केवल वर्तमान PowerShell सत्र पर लागू होती हैं (powershell.exe प्रक्रिया समाप्त होने के बाद रीसेट हो जाती हैं)
  • CurrentUser - एक्जीक्यूशन पॉलिसी केवल वर्तमान उपयोगकर्ता पर लागू होती है (HKEY_CURRENT_USER रजिस्ट्री कुंजी का एक पैरामीटर)
  • LocalMachine - कंप्यूटर के सभी उपयोगकर्ताओं के लिए पॉलिसी (HKEY_LOCAL_MACHINE रजिस्ट्री कुंजी से एक पैरामीटर)

आप Set-ExecutionPolicy cmdlet के Scope पैरामीटर का उपयोग करके पॉलिसी स्कोप सेट कर सकते हैं। उदाहरण के लिए:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

आइए सभी स्कोप के लिए वर्तमान एक्जीक्यूशन पॉलिसी सेटिंग्स की जांच करें:

Get-ExecutionPolicy -List
Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Bypass CurrentUser Undefined LocalMachine RemoteSigned

Set-ExecutionPolicy cmdlet का उपयोग करके CurrentUser और LocalMachine स्कोप के लिए आपके द्वारा सेट किए गए एक्जीक्यूशन पॉलिसी मान रजिस्ट्री में संग्रहीत होते हैं। उदाहरण के लिए, यह कमांड चलाएं:

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell रजिस्ट्री कुंजी खोलें और ExecutionPolicy पैरामीटर के REG_SZ मान की जांच करें। यह Restricted में बदल जाना चाहिए (अनुमत पैरामीटर मान Restricted, AllSigned, RemoteSigned, Bypass, Unrestricted और Undefined हैं)।

CurrentUser स्कोप के लिए समान सेटिंग्स HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell के अंतर्गत स्थित हैं।

इसका मतलब है कि आप ग्रुप पॉलिसी प्राथमिकताओं का उपयोग करके रजिस्ट्री के माध्यम से PowerShell स्क्रिप्ट एक्जीक्यूशन पॉलिसी सेटिंग्स को तैनात कर सकते हैं।

ध्यान दें कि LocalMachine स्तर पर AllSigned मान वाली ExecutionPolicy का उपयोग कॉर्पोरेट वातावरण में सबसे अधिक किया जाता है। यह सुरक्षा और सुविधा के बीच सबसे अच्छा संतुलन प्रदान करता है। व्यक्तिगत उपयोग के लिए, आप अपने कंप्यूटर पर RemoteSigned सेटिंग का उपयोग कर सकते हैं। Bypass पॉलिसी का उपयोग केवल कुछ कार्यों को चलाने के लिए किया जा सकता है (उदाहरण के लिए, GPO या टास्क शेड्यूलर में कार्यों का उपयोग करके स्क्रिप्ट चलाने के लिए)।

GPO का उपयोग करके एक्टिव डायरेक्टरी में PowerShell एक्जीक्यूशन पॉलिसी सेट करना

आप ग्रुप पॉलिसी का उपयोग करके एक्टिव डायरेक्टरी डोमेन में सर्वर या डोमेन कंप्यूटर पर PowerShell स्क्रिप्ट के लिए एक्जीक्यूशन पॉलिसी कॉन्फ़िगर कर सकते हैं।

  1. डोमेन GPO एडिटर (gpmc.msc) में, एक नया GPO बनाएं या मौजूदा को संपादित करें और इसे उस OU से लिंक करें जिसमें वे कंप्यूटर हैं जिन पर आप PowerShell स्क्रिप्ट एक्जीक्यूशन पॉलिसी लागू करना चाहते हैं
  2. GPO एडिटर में कंप्यूटर कॉन्फ़िगरेशन -> नीतियां -> प्रशासनिक टेम्पलेट्स -> Windows घटक -> Windows PowerShell खोलें और स्क्रिप्ट निष्पादन चालू करें पैरामीटर ढूंढें। उपयोगकर्ता GPO अनुभाग में भी यही पॉलिसी है - उपयोगकर्ता कॉन्फ़िगरेशन, लेकिन कंप्यूटर पॉलिसी की प्राथमिकता अधिक होती है
  3. पॉलिसी के तीन मान हो सकते हैं:
    1. केवल हस्ताक्षरित स्क्रिप्ट की अनुमति दें - AllSigned पॉलिसी के अनुरूप
    2. स्थानीय स्क्रिप्ट और रिमोट हस्ताक्षरित स्क्रिप्ट की अनुमति दें - PS RemoteSigned पॉलिसी के अनुरूप
    3. सभी स्क्रिप्ट की अनुमति दें - Unrestricted पॉलिसी के अनुरूप
  4. वांछित पॉलिसी मान सेट करें, GPO को सहेजें और अपने कंप्यूटर पर ग्रुप पॉलिसी सेटिंग्स अपडेट करें
  5. सुनिश्चित करें कि नई निष्पादन सेटिंग्स 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 एक्जीक्यूशन पॉलिसी को बायपास कैसे करें?

कुछ ट्रिक्स हैं जो आपकी मदद कर सकती हैं यदि आप एक्जीक्यूशन पॉलिसी सेटिंग्स को बदले बिना अपने कंप्यूटर पर PowerShell स्क्रिप्ट चलाना चाहते हैं। उदाहरण के लिए, मैं एक साधारण PS1 स्क्रिप्ट चलाना चाहता हूं जो जांचती है कि यह व्यवस्थापक के रूप में चल रही है या नहीं।

आप Get-Content का उपयोग करके स्क्रिप्ट की सामग्री प्राप्त कर सकते हैं और इसे PS कंसोल के मानक इनपुट स्ट्रीम पर रीडायरेक्ट कर सकते हैं।

Get-Content c:\ps\check_process_elevation.ps1 | PowerShell.exe -noprofile –

या आप Bypass पॉलिसी के साथ एक नई powershell.exe प्रक्रिया चला सकते हैं:

powershell.exe -noprofile -executionpolicy bypass -file c:\ps\check_process_elevation.ps1
  1. फिक्स: इस सिस्टम पर स्क्रिप्ट का निष्पादन अक्षम है फिक्स: इस सिस्टम पर स्क्रिप्ट का निष्पादन अक्षम है

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

  1. लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

    शेल स्क्रिप्ट बनाना सबसे आवश्यक कौशल में से एक है जो लिनक्स उपयोगकर्ताओं की उंगलियों पर होना चाहिए। शेल स्क्रिप्ट दोहराए जाने वाले कार्यों को स्वचालित करने में एक बड़ी भूमिका निभाती है जो अन्यथा लाइन दर लाइन निष्पादित करना थकाऊ होगा। इस ट्यूटोरियल में, हम कुछ बुनियादी शेल स्क्रिप्टिंग ऑपरेशंस को हा

  1. PowerShell में डिले/पॉज जोड़ें: सरल कमांड और व्यावहारिक उदाहरण PowerShell में डिले/पॉज जोड़ें: सरल कमांड और व्यावहारिक उदाहरण

    PowerShell स्क्रिप्ट में पॉज कैसे जोड़ें PowerShell ISE खोलें (Start से)। स्क्रिप्ट खोलें। जहां पॉज चाहिए वहां डालें: Start-Sleep -Seconds 5 (5 की जगह सेकंड डालें)। सेव करके चलाएं। सिंटैक्स Start-Sleep -Seconds <नंबर> Start-Sleep -Milliseconds <नंबर> उदाहरण Start-Sleep -Seconds 1.5