ডিফল্টলি, উইন্ডোজ সেটিংস পাওয়ারশেল স্ক্রিপ্ট চালানো থেকে বাধা দেয়। নিরাপত্তার দৃষ্টিকোণ থেকে, পাওয়ারশেল স্ক্রিপ্ট থেকে অট্রাস্টেড এবং ম্যালিশিয়াস কোড চালানো বাধা দেওয়া গুরুত্বপূর্ণ। এক্সিকিউশন পলিসি পাওয়ারশেল স্ক্রিপ্ট চালানোর সেটিংস নির্ধারণ করে। এই আর্টিকেলে আমরা উইন্ডোজে PS স্ক্রিপ্ট চালানোর উপলব্ধ সেটিংস, এক্সিকিউশন পলিসি পরিবর্তন এবং GPO ব্যবহার করে ডোমেইন কম্পিউটারগুলোর জন্য পাওয়ারশেল স্ক্রিপ্ট এক্সিকিউশন পলিসি কনফিগারেশন নিয়ে আলোচনা করব।
এই সিস্টেমে পাওয়ারশেল স্ক্রিপ্ট চালানো অক্ষম
ক্লিন উইন্ডোজ ১০-এ যেকোনো পাওয়ারশেল স্ক্রিপ্ট (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
উইন্ডোজে পাওয়ারশেল স্ক্রিপ্ট এক্সিকিউশন পলিসির বর্তমান সেটিং জানতে নিচের কমান্ড ব্যবহার করুন:
Get-ExecutionPolicy
নিচের পাওয়ারশেল এক্সিকিউশন পলিসি ভ্যালুগুলো উপলব্ধ:
- Restricted – পাওয়ারশেল স্ক্রিপ্ট চালানো অক্ষম, শুধু 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 – লোকাল পাওয়ারশেল স্ক্রিপ্ট কোনো বাধা ছাড়াই চালানো যাবে। রিমোট PS ফাইল ডিজিটাল সিগনেচার দিয়ে চালানো যাবে (ইন্টারনেট থেকে ডাউনলোড করা বা UNC পাথের মাধ্যমে শেয়ার্ড নেটওয়ার্ক ফোল্ডার থেকে চালানো PS1 ফাইল চালানো যাবে না);
- Unrestricted – সব পাওয়ারশেল স্ক্রিপ্ট চালানো যাবে; থার্ড-পার্টি পাওয়ারশেল স্ক্রিপ্ট চালানোর চেষ্টা করলে কনফার্মেশন প্রম্পট আসতে পারে।
- Bypass – যেকোনো PS ফাইল চালানো যাবে (কোনো ওয়ার্নিং দেখা যাবে না)। এই পলিসি সাধারণত PS স্ক্রিপ্ট অটোমেটিক চালাতে ব্যবহৃত হয় (যেমন GPO, SCCM, Task Scheduler-এর মাধ্যমে) এবং পারমানেন্ট ব্যবহারে রিকমেন্ড করা হয় না;
- Default – পাওয়ারশেল স্ক্রিপ্ট এক্সিকিউশন সেটিংস ডিফল্টে রিসেট করে; উইন্ডোজ ১০-এ ডিফল্ট ভ্যালু Restricted, আর উইন্ডোজ সার্ভার ২০১৬-এ RemoteSigned।
- Undefined – পলিসি সেট করা নেই। ডেস্কটপ OS-এ Restricted পলিসি এবং সার্ভার OS-এ RemoteSigned প্রয়োগ হয়।
এক্সিকিউশন পলিসি ব্যবহার করে পাওয়ারশেল স্ক্রিপ্ট চালানোর অনুমতি কীভাবে দেবেন?
পাওয়ারশেল স্ক্রিপ্ট এক্সিকিউশন পলিসির বর্তমান ভ্যালু পরিবর্তন করতে Set-ExecutionPolicy কামডলেট ব্যবহার করা হয়।
উদাহরণস্বরূপ, লোকাল PS স্ক্রিপ্ট ফাইল চালানোর অনুমতি দিই:
Set-ExecutionPolicy RemoteSigned
PS1 স্ক্রিপ্টের জন্য এক্সিকিউশন পলিসি পরিবর্তন কনফার্ম করতে Y বা A চাপুন।
কনফার্মেশন প্রম্পট এড়াতে Force প্যারামিটার ব্যবহার করুন।
Set-ExecutionPolicy RemoteSigned –Force
যদি পাওয়ারশেল এক্সিকিউশন পলিসি 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")
পাওয়ারশেল লোকাল এবং রিমোট স্ক্রিপ্ট কীভাবে আলাদা করে? এটি ব্রাউজার দ্বারা ফাইল ডাউনলোড করার সময় অল্টারনেটিভ স্ট্রিমে সেট করা ZoneId আইডেন্টিফায়ারের কারণে ( detalles দেখুন: How does Windows know if a file was downloaded from the Internet?)। ফাইল প্রপার্টিজে Unblock চেক করে বা Unblock-File কামডলেট ব্যবহার করে জোন লেবেল ক্লিয়ার করা যায়।
পাওয়ারশেল এক্সিকিউশন পলিসির বিভিন্ন স্কোপও আলাদা করতে হবে:
- MachinePolicy – GPO দ্বারা সেট হয় এবং কম্পিউটারের সব ইউজারের জন্য প্রয়োগ হয়;
- UserPolicy – GPO দ্বারা সেট হয় এবং কম্পিউটার ইউজারদের জন্য প্রয়োগ হয়;
- Process — বর্তমান পাওয়ারশেল সেশনের জন্য এক্সিকিউশন পলিসি সেটিংস প্রয়োগ হয় (powershell.exe প্রসেস টার্মিনেট হলে রিসেট হয়);
- CurrentUser – এক্সিকিউশন পলিসি শুধু বর্তমান ইউজারের জন্য প্রয়োগ হয় (HKEY_CURRENT_USER রেজিস্ট্রি কি প্যারামিটার);
- LocalMachine – কম্পিউটারের সব ইউজারের জন্য পলিসি (HKEY_LOCAL_MACHINE রেজিস্ট্রি কি থেকে প্যারামিটার)।
Set-ExecutionPolicy কামডলেটের Scope প্যারামিটার ব্যবহার করে পলিসি স্কোপ সেট করা যায়। উদাহরণ:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force
সব স্কোপের জন্য বর্তমান ExecutionPolicy সেটিংস চেক করুন:
Get-ExecutionPolicy -List
Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Bypass CurrentUser Undefined LocalMachine RemoteSigned
Set-ExecutionPolicy কামডলেট ব্যবহার করে CurrentUser এবং LocalMachine স্কোপের জন্য সেট করা ExecutionPolicy ভ্যালুগুলো রেজিস্ট্রিতে সংরক্ষিত হয়। উদাহরণস্বরূপ এই কমান্ড চালান:
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-এ থাকে।
অর্থাৎ আপনি গ্রুপ পলিসি প্রেফারেন্স ব্যবহার করে রেজিস্ট্রি দিয়ে পাওয়ারশেল স্ক্রিপ্ট এক্সিকিউশন পলিসি সেটিংস ডিপ্লয় করতে পারেন।
লক্ষ্য করুন যে কর্পোরেট এনভায়রনমেন্টে LocalMachine লেভেলে AllSigned ভ্যালু সেট করা সবচেয়ে বেশি ব্যবহৃত হয়। এটি নিরাপত্তা এবং সুবিধার মধ্যে সেরা ব্যালেন্স প্রদান করে। পারসোনাল ব্যবহারে আপনি আপনার কম্পিউটারে RemoteSigned সেটিং ব্যবহার করতে পারেন। Bypass পলিসি শুধু কিছু টাস্ক চালাতে ব্যবহার করা উচিত (যেমন GPO বা Task Scheduler-এ স্ক্রিপ্ট চালানো)।
গ্রুপ পলিসি ব্যবহার করে এক্টিভ ডিরেক্টরিতে পাওয়ারশেল এক্সিকিউশন পলিসি সেট করা
গ্রুপ পলিসি ব্যবহার করে সার্ভার বা ডোমেইন কম্পিউটারগুলোর জন্য পাওয়ারশেল স্ক্রিপ্ট এক্সিকিউশন পলিসি কনফিগার করা যায়।
- ডোমেইন GPO এডিটর (
gpmc.msc) খুলুন, নতুন GPO তৈরি করুন বা বিদ্যমানটি এডিট করুন এবং এটিকে কম্পিউটার থাকা OU-র সাথে লিঙ্ক করুন যেগুলোর ऊपर পাওয়ারশেল স্ক্রিপ্ট এক্সিকিউশন পলিসি প্রয়োগ করতে চান; - GPO এডিটরে Computer Configuration → Policies → Administrative Templates → Windows Components → Windows PowerShell-এ যান এবং Turn on Script Execution প্যারামিটার খুঁজুন। ইউজার GPO সেকশনে — User Configuration-এ একই পলিসি রয়েছে, কিন্তু কম্পিউটার পলিসির প্রায়োরিটি বেশি।
- পলিসির তিনটি ভ্যালু হতে পারে:
- Allow only signed scripts – AllSigned পলিসির সমতুল্য
- Allow local scripts and remote signed scripts – PS RemoteSigned পলিসির সমতুল্য
- Allow all scripts – Unrestricted পলিসির সমতুল্য
- ইচ্ছামতো পলিসি ভ্যালু সেট করুন, 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.
স্ট্যান্ডঅ্যালোন (workgroup) কম্পিউটারে লোকাল GPO এডিটর — gpedit.msc ব্যবহার করে একইভাবে এক্সিকিউশন পলিসি কনফিগার করা যায়।
উইন্ডোজে পাওয়ারশেল এক্সিকিউশন পলিসি বাইপাস করার উপায়
এক্সিকিউশন পলিসি সেটিংস পরিবর্তন না করে আপনার কম্পিউটারে পাওয়ারশেল স্ক্রিপ্ট চালাতে হলে কিছু ট্রিক কাজে লাগে। উদাহরণস্বরূপ, আমি একটি সিম্পল 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