پاورشل برای برنامهنویسان
@programming_tipsدرسنامه: اجرای اسکریپتها (.ps1)
در این درسنامه یاد میگیری چگونه اسکریپتهای PowerShell را اجرا کنی، چه تنظیماتی برای این کار لازم است، و چطور از خطاهای مربوط به امنیت یا مسیر جلوگیری کنی. اسکریپتها در PowerShell فایلهایی با پسوند .ps1 هستند که مجموعهای از دستورات را بهصورت خودکار اجرا میکنند — درست مثل فایلهای .bat در CMD اما بسیار قدرتمندتر و انعطافپذیرتر.
مفهوم اسکریپت در PowerShell
اسکریپت در PowerShell در واقع یک فایل متنی ساده است که مجموعهای از دستورات، توابع و متغیرها در آن نوشته شدهاند. وقتی فایل اجرا میشود، PowerShell آن را خطبهخط میخواند و اجرا میکند.
برای مثال، این یک اسکریپت ساده است:
# Script.ps1 $name = "Ali" Write-Host "Hello, $name!"
وقتی آن را اجرا کنی، خروجی زیر نمایش داده میشود:
Hello, Ali!
ذخیره و ساخت اسکریپت
برای ساخت یک اسکریپت:
- در Notepad یا VS Code یک فایل جدید باز کن.
- دستورات PowerShell را بنویس.
- فایل را با پسوند
.ps1ذخیره کن (مثلاًTestScript.ps1).
اگر از VS Code استفاده میکنی، افزونهی PowerShell را نصب کن تا هایلایت سینتکس و تکمیل خودکار دستورات را داشته باشی.
اجرای مستقیم اسکریپتها
برای اجرای اسکریپت کافی است در محیط PowerShell مسیر فایل را بنویسی.
اما نکتهی مهم این است که PowerShell به دلایل امنیتی اجازهی اجرای اسکریپتها را به صورت پیشفرض نمیدهد.
برای مثال اگر این دستور را اجرا کنی:
C:\Scripts\TestScript.ps1
ممکن است با خطای زیر روبهرو شوی:
File C:\Scripts\TestScript.ps1 cannot be loaded because running scripts is disabled on this system.
این خطا مربوط به Execution Policy است.
تنظیم Execution Policy
PowerShell برای جلوگیری از اجرای اسکریپتهای خطرناک، سیاستی به نام Execution Policy دارد.
با دستور زیر میتوانی مقدار فعلی آن را ببینی:
Get-ExecutionPolicy
مقدار پیشفرض معمولاً Restricted است، یعنی هیچ اسکریپتی قابل اجرا نیست.
برای تغییر این وضعیت، باید آن را به حالت مجازتر تغییر دهی.
رایجترین گزینهها:
- RemoteSigned: فقط اسکریپتهای محلی بدون امضا اجرا میشوند.
- Unrestricted: همهی اسکریپتها مجاز هستند.
برای تنظیم حالت RemoteSigned:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
پارامتر -Scope CurrentUser یعنی فقط برای کاربر فعلی اعمال شود و نیازی به دسترسی Administrator نیست.
روشهای اجرای اسکریپت
در PowerShell چند روش برای اجرای یک اسکریپت وجود دارد:
- با مسیر کامل:
C:\Scripts\TestScript.ps1
- اگر در همان پوشه هستی:
- باید از
.\استفاده کنی تا PowerShell بفهمد فایل در مسیر جاری است:
.\TestScript.ps1
- با استفاده از متغیر مسیر:
- اگر اسکریپت را در پوشهای قرار دهی که در PATH سیستم تعریف شده، میتوانی آن را بدون مسیر اجرا کنی:
TestScript.ps1
اجرای اسکریپت با پارامتر
میتوانی برای اسکریپتها پارامتر تعریف کنی تا هنگام اجرا داده دریافت کنند.
مثلاً در فایل Greet.ps1 بنویس:
param($name) Write-Host "Hello, $name!"
سپس هنگام اجرا مقدار بده:
.\Greet.ps1 -name "Sara"
خروجی:
Hello, Sara!
این قابلیت باعث میشود اسکریپتها قابل استفادهی مجدد و پویا باشند.
اجرای اسکریپت از خط فرمان یا Task Scheduler
میتوانی اسکریپتها را از محیطهای دیگر نیز اجرا کنی. مثلاً از CMD:
powershell.exe -File "C:\Scripts\TestScript.ps1"
یا از Task Scheduler برای اجرای خودکار در ساعت خاصی:
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\Backup.ps1"
گزینهی -ExecutionPolicy Bypass باعث میشود سیاست امنیتی برای همان اجرا نادیده گرفته شود.
خطاهای رایج هنگام اجرای اسکریپت
- Access Denied:
- معمولاً به دلیل مجوز ناکافی یا Execution Policy محدود است.
- راهحل: اجرای PowerShell با دسترسی Administrator یا تغییر Policy.
- File Not Found:
- مسیر اشتباه یا ننوشتن
.\در ابتدای نام فایل. - Encoding مشکل دارد:
- گاهی اسکریپتهایی که با Notepad ذخیره میشوند با Encoding اشتباه (مثل UTF-16) باعث خطا میشوند.
- بهتر است فایل را با UTF-8 without BOM ذخیره کنی.
بهترین روشهای اجرا
- همیشه اسکریپتهای خود را از منابع معتبر بگیر.
- قبل از اجرای فایل ناشناس، محتوا را با
Get-Contentبررسی کن. - از
Write-OutputیاWrite-Verboseبرای گزارشدهی درون اسکریپت استفاده کن. - اگر در محیط کاری هستی، Execution Policy را روی
RemoteSignedنگه دار تا امنیت حفظ شود.
جمعبندی
اجرای اسکریپتهای .ps1 قلب خودکارسازی در PowerShell است.
یاد گرفتی که:
- اسکریپتها چگونه ساخته و اجرا میشوند.
- Execution Policy چیست و چطور باید تنظیم شود.
- چطور اسکریپتها را با پارامتر و از محیطهای دیگر اجرا کنی.
با تسلط بر این بخش، میتوانی فرآیندهای تکراری را خودکارسازی کنی، ابزارهای سفارشی بسازی و از PowerShell بهعنوان یک زبان اسکریپتنویسی کامل بهره ببری.