ডিফল্টরূপে, Windows সেটিংস PowerShell স্ক্রিপ্টগুলিকে চলতে বাধা দেয়। নিরাপত্তার দৃষ্টিকোণ থেকে, পাওয়ারশেল স্ক্রিপ্ট থেকে অবিশ্বস্ত এবং দূষিত কোডগুলি চালানো থেকে সীমাবদ্ধ করা গুরুত্বপূর্ণ। এক্সিকিউশন নীতি PowerShell স্ক্রিপ্ট চালানোর জন্য সেটিংস নির্ধারণ করে। এই নিবন্ধে আমরা Windows এ PS স্ক্রিপ্ট চালানোর জন্য উপলব্ধ সেটিংস দেখব, কিভাবে এক্সিকিউশন নীতি পরিবর্তন করতে হয় এবং GPO ব্যবহার করে ডোমেন কম্পিউটারের জন্য 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
আপনি নিম্নলিখিত কমান্ড ব্যবহার করে Windows এ PowerShell স্ক্রিপ্ট এক্সিকিউশন নীতির জন্য বর্তমান সেটিংস পেতে পারেন:
Get-ExecutionPolicy
নিম্নলিখিত পাওয়ারশেল এক্সিকিউশন নীতির মানগুলি উপলব্ধ:
- সীমাবদ্ধ – PowerShell স্ক্রিপ্ট চালানো নিষ্ক্রিয় করা হয়েছে, আপনি শুধুমাত্র PS কনসোলে ইন্টারেক্টিভ কমান্ডগুলি চালাতে পারেন;
- সমস্ত স্বাক্ষরিত - শুধুমাত্র একজন বিশ্বস্ত প্রকাশকের ডিজিটাল স্বাক্ষর সহ স্বাক্ষরিত 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.
- রিমোট সাইনড৷ – আপনি কোনো সীমাবদ্ধতা ছাড়াই স্থানীয় PowerShell স্ক্রিপ্ট চালাতে পারেন। আপনি একটি ডিজিটাল স্বাক্ষর সহ দূরবর্তী PS ফাইলগুলি চালাতে পারেন (আপনি ইন্টারনেট থেকে ডাউনলোড করা PS1 ফাইলগুলি চালাতে পারবেন না বা UNC পাথের মাধ্যমে একটি ভাগ করা নেটওয়ার্ক ফোল্ডার থেকে চালু করতে পারবেন না);
- অনিয়ন্ত্রিত - সমস্ত PowerShell স্ক্রিপ্ট চালানোর অনুমতি দেওয়া হয়; তৃতীয় পক্ষের পাওয়ারশেল স্ক্রিপ্ট চালানোর চেষ্টা করার সময়, আপনাকে লঞ্চ নিশ্চিত করার জন্য অনুরোধ করা হতে পারে (নীচে দেখুন)।
- বাইপাস - যেকোনো PS ফাইল চালানোর অনুমতি দেওয়া হয় (কোন সতর্কতা প্রদর্শিত হয় না)। নীতিটি সাধারণত কোনো বিজ্ঞপ্তি প্রদর্শন না করে স্বয়ংক্রিয়ভাবে PS স্ক্রিপ্ট চালানোর জন্য ব্যবহার করা হয় (উদাহরণস্বরূপ, যখন স্ক্রিপ্টগুলি GPO, SCCM, টাস্ক শিডিউলার, ইত্যাদির মাধ্যমে চালানো হয়) এবং স্থায়ী ব্যবহারের জন্য সুপারিশ করা হয় না;
- ডিফল্ট - পাওয়ারশেল স্ক্রিপ্ট এক্সিকিউশন সেটিংস ডিফল্টে রিসেট করে; Windows 10-এ PowerShell এক্সিকিউশন নীতির ডিফল্ট মান হল সীমাবদ্ধ , এবং Windows Server 2016-এ এটি রিমোট সাইনড৷ .
- অনির্ধারিত - নীতি সেট করা নেই. সীমাবদ্ধ নীতি ডেস্কটপ OS এবং সার্ভারগুলির জন্য RemoteSigned-এ প্রয়োগ করা হয়৷
কিভাবে PowerShell কে এক্সিকিউশন পলিসি ব্যবহার করে স্ক্রিপ্ট চালানোর অনুমতি দেবেন?
PowerShell স্ক্রিপ্ট এক্সিকিউশন নীতির বর্তমান মান পরিবর্তন করতে, Set-Execution Policy 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
ব্যবহার করে জোন লেবেলটি সাফ করুন cmdlet. এছাড়াও আপনাকে পাওয়ারশেল এক্সিকিউশন নীতির বিভিন্ন স্কোপের মধ্যে পার্থক্য করতে হবে:
- মেশিন নীতি - GPO ব্যবহার করে সেট করা হয় এবং কম্পিউটারের সকল ব্যবহারকারীর জন্য প্রযোজ্য;
- ব্যবহারকারী নীতি – এছাড়াও GPO ব্যবহার করে সেট করুন এবং কম্পিউটার ব্যবহারকারীদের জন্য প্রযোজ্য;
- প্রক্রিয়া — এক্সিকিউশন পলিসি সেটিংস শুধুমাত্র বর্তমান PowerShell সেশনে প্রয়োগ করা হয় (এবং powershell.exe প্রক্রিয়া শেষ হওয়ার পরে পুনরায় সেট করা হয়);
- বর্তমান ব্যবহারকারী৷ – এক্সিকিউশন নীতি শুধুমাত্র বর্তমান ব্যবহারকারীর জন্য প্রয়োগ করা হয় (HKEY_CURRENT_USER রেজিস্ট্রি কী-এর একটি প্যারামিটার);
- লোকালমেশিন একটি কম্পিউটারের সকল ব্যবহারকারীর জন্য একটি নীতি (HKEY_LOCAL_MACHINE রেজিস্ট্রি কী থেকে একটি প্যারামিটার)।
আপনি স্কোপ ব্যবহার করে নীতির সুযোগ সেট করতে পারেন Set-ExecutionPolicy cmdlet-এর প্যারামিটার। যেমন:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force
চলুন সব সুযোগের জন্য বর্তমান ExecutionPolicy সেটিংস পরীক্ষা করে দেখি:
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 রেজিস্ট্রি কী খুলুন এবং Execution Policy-এর REG_SZ মান পরীক্ষা করুন প্যারামিটার এটি সীমাবদ্ধ তে পরিবর্তিত হওয়া উচিত (অনুমোদিত প্যারামিটার মানগুলি হল সীমাবদ্ধ, AllSigned, RemoteSigned, বাইপাস, Unrestricted এবং অনির্ধারিত)।
CurrentUser স্কোপের জন্য একই সেটিংস HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell-এর অধীনে অবস্থিত .
এর মানে হল যে আপনি গ্রুপ নীতি পছন্দগুলি ব্যবহার করে রেজিস্ট্রির মাধ্যমে PowerShell স্ক্রিপ্ট এক্সিকিউশন নীতি সেটিংস স্থাপন করতে পারেন।মনে রাখবেন যে অল সাইনড এর সাথে এক্সিকিউশন পলিসি LocalMachine স্তরের মান একটি কর্পোরেট পরিবেশে প্রায়শই ব্যবহৃত হয়। এটি নিরাপত্তা এবং সুবিধার মধ্যে সর্বোত্তম ভারসাম্য প্রদান করে। ব্যক্তিগত ব্যবহারের জন্য, আপনি আপনার কম্পিউটারে RemoteSigned সেটিংস ব্যবহার করতে পারেন৷ বাইপাস নীতি শুধুমাত্র কিছু কাজ চালানোর জন্য ব্যবহার করা যেতে পারে (উদাহরণস্বরূপ, জিপিও ব্যবহার করে স্ক্রিপ্ট চালানো বা টাস্ক শিডিউলারের কাজগুলি)।
GPO ব্যবহার করে সক্রিয় ডিরেক্টরিতে PowerShell এক্সিকিউশন নীতি সেট করুন
আপনি গ্রুপ নীতিগুলি ব্যবহার করে সক্রিয় ডিরেক্টরি ডোমেনে সার্ভার বা ডোমেন কম্পিউটারগুলিতে PowerShell স্ক্রিপ্টগুলির জন্য এক্সিকিউশন নীতি কনফিগার করতে পারেন৷
- ডোমেনে GPO সম্পাদক (
gpmc.msc
), একটি নতুন GPO তৈরি করুন বা একটি বিদ্যমান একটি সম্পাদনা করুন এবং আপনি PowerShell স্ক্রিপ্ট এক্সিকিউশন নীতি প্রয়োগ করতে চান এমন কম্পিউটার ধারণকারী OU এর সাথে লিঙ্ক করুন; - ওপেন কম্পিউটার কনফিগারেশন -> নীতি -> প্রশাসনিক টেমপ্লেট -> উইন্ডোজ উপাদান -> উইন্ডোজ পাওয়ারশেল GPO সম্পাদকে এবং স্ক্রিপ্ট এক্সিকিউশন চালু করুন খুঁজুন প্যারামিটার ব্যবহারকারীর জিপিও বিভাগে একই নীতি রয়েছে — ব্যবহারকারী কনফিগারেশন, তবে কম্পিউটার নীতির অগ্রাধিকার বেশি।
- নীতির তিনটি মান থাকতে পারে:
- শুধুমাত্র স্বাক্ষরিত স্ক্রিপ্টগুলিকে অনুমতি দিন৷ – AllSigned নীতির সাথে সঙ্গতিপূর্ণ
- স্থানীয় স্ক্রিপ্ট এবং রিমোট স্বাক্ষরিত স্ক্রিপ্টগুলিকে অনুমতি দিন – পিএস রিমোট সাইনড নীতির সাথে সম্পর্কিত
- সমস্ত স্ক্রিপ্টের অনুমতি দিন – অনিয়ন্ত্রিত নীতির সাথে সম্পর্কিত
- আপনার পছন্দের নীতির মান সেট করুন, 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 –
অথবা আপনি বাইপাস নীতির সাথে একটি নতুন powershell.exe প্রক্রিয়া চালাতে পারেন:
powershell.exe -noprofile -executionpolicy bypass -file c:\ps\check_process_elevation.ps1