قراره چی یاد بگیریم؟ از نصب تا دستورات کاربردی روزمره، امکانات منحصربهفرد و ترفندهای حرفهای — قدمبهقدم و بدون پرش.
این آموزش از صفرِ صفر نوشته شده؛ یعنی هیچ پیشنیازی جز داشتن یک کامپیوتر ویندوزی و اتصال اینترنت برای نصب نیاز ندارید. اگر پیشتر با خط فرمان کار کردهاید، میتوانید بخش نصب را رد کنید و مستقیم به «قانون طلایی نامگذاری دستورها» بروید.
فرضهای این آموزش:
فرض کنید در یک شرکت، از دستیارتان میخواهید فهرست کارمندانِ بخش فروش را که بیش از سه سال سابقه دارند بیرون بکشد، بر اساس سابقهکار مرتب کند و فقط نام و ایمیل آنها را روی کاغذ بیاورد. یک دستیار معمولی باید این کار را در چند مرحلهٔ جدا و با یادداشتبرداری دستی انجام دهد. یک دستیار حرفهای، همان درخواست را در یک جمله میفهمد و خروجی را هم بهصورت یک جدول تمیز و آمادهٔ استفاده تحویل میدهد، نه یک مشت کاغذ پراکنده.
PowerShell (در این آموزش «پاورشل» مینامیمش) همان دستیار حرفهای برای کامپیوتر شماست. پاورشل یک پوسته۱ و زبان اسکریپتنویسی۲ است که مایکروسافت آن را برای مدیریت کامپیوتر، فایلها، سرویسها و حتی سرورهای شبکه ساخته است.
ویندوز شما از قبل یک نسخهٔ پاورشل نصب دارد به نام Windows PowerShell 5.1. این نسخه سالهاست تغییر نکرده و فقط روی ویندوز کار میکند.
در کنار آن، مایکروسافت نسخهٔ جدیدتری به نام PowerShell 7 (که گاهی PowerShell Core هم نامیده میشود) منتشر کرده که روی ویندوز، مک و لینوکس اجرا میشود، سریعتر است و امکانات بیشتری دارد. این دو نسخه کنار هم و بدون تداخل نصب و اجرا میشوند.
| ویژگی | Windows PowerShell 5.1 | PowerShell 7 |
|---|---|---|
| نصب پیشفرض روی ویندوز | بله | خیر (باید نصب شود) |
| سیستمعاملهای پشتیبانیشده | فقط ویندوز | ویندوز، مک، لینوکس |
| دستور اجرا در خط فرمان | powershell | pwsh |
| تکمیل هوشمند دستورها | ساده | پیشرفته (پیشبینی حین تایپ) |
گام ۱ کلید Win را بزنید، عبارت PowerShell را تایپ کنید و ببینید برنامهای با نام Windows PowerShell در نتایج ظاهر میشود — این همان نسخهٔ داخلی است، فعلاً فقط ببینید هست یا نه، بازش نکنید.
گام ۲ همان برنامهٔ Windows PowerShell را باز کنید (کلیک روی نتیجهٔ جستوجو کافی است). یک پنجرهٔ آبیرنگ باز میشود.
گام ۳ برای نصب نسخهٔ ۷، سادهترین و توصیهشدهٔ رسمی مایکروسافت، استفاده از ابزار winget است که از قبل روی ویندوز ۱۰ و ۱۱ نصب است. همین دستور را در همان پنجرهٔ آبی تایپ کنید و اینتر بزنید:
winget install --id Microsoft.PowerShell --source winget
چند ثانیه صبر کنید تا دانلود و نصب تمام شود. ممکن است یک پیام تأیید (Y/N) بپرسد؛ حرف Y را تایپ و اینتر بزنید.
گام ۴ پس از پایان نصب، دوباره کلید Win را بزنید و اینبار عبارت PowerShell را تایپ کنید. حالا باید گزینهای به نام PowerShell 7 (با آیکون مشکی) هم در کنار نسخهٔ قدیمی دیده شود. همان را باز کنید.
winget با پیام خطا مواجه شد یا اصلاً شناخته نشد، احتمالاً نسخهٔ ویندوز شما قدیمی است. در این حالت بهجای آن، فایل نصب رسمی را از صفحهٔ رسمی مایکروسافت دانلود کنید:
learn.microsoft.com/powershell/scripting/install/installing-powershell-on-windows
و پس از دانلود فایل .msi، مثل هر نرمافزار دیگری آن را دوبار کلیک و نصب کنید.
$PSVersionTable.PSVersion
باید عددی مثل 7.6.x یا بالاتر ببینید. اگر دیدید، نصب موفق بوده است.
پنجرهٔ پاورشل که باز میشود، یک خط با علامت PS C:\Users\NameOfUser> نشان میدهد. این خط را خط فرمان (Prompt) میگویند؛ یعنی اینجا منتظر است شما دستور تایپ کنید.
گام ۱ این دستور ساده را تایپ کرده و اینتر بزنید تا تاریخ و ساعت را ببینید:
Get-Date
گام ۲ حالا این را امتحان کنید تا فهرست برنامههای در حال اجرا را ببینید:
Get-Process
یک جدول با ستونهای مرتب (نام برنامه، مصرف حافظه، شناسه و…) ظاهر میشود. به این جدول در ادامه بازمیگردیم.
cls یا Clear-Host را بزنید.
Get-Date تاریخ امروز را دیدید، محیط شما آماده است.
در پاورشل، هر دستور را cmdlet۳ مینامند و همهٔ آنها از یک قاعدهٔ ثابت پیروی میکنند: فعل-اسم (Verb-Noun). یعنی همیشه اول میگویید چه کاری (فعل)، بعد روی چه چیزی (اسم):
Get-Process = «بگیر» + «فرایندها»Get-Service = «بگیر» + «سرویسها»Stop-Process = «متوقف کن» + «فرایند»New-Item = «بساز» + «آیتم/فایل»Stop-Service است — و همینطور هم هست.
Start-Service)
یکی از امکانات منحصربهفرد پاورشل این است که خودش راهنمای کامل خودش را دارد؛ نیازی نیست هر بار جستوجوی اینترنتی کنید. سه دستور کلیدی:
گام ۱ برای پیدا کردن دستورهای مرتبط با یک موضوع، از Get-Command استفاده کنید:
Get-Command *service*
این دستور همهٔ cmdletهایی را نشان میدهد که کلمهٔ «service» در نامشان است — از جمله همان Start-Service که در مرحلهٔ قبل حدس زدید.
گام ۲ برای دیدن توضیح کامل و مثالهای یک دستور، از Get-Help استفاده کنید:
Get-Help Get-Process -Examples
گام ۳ برای دیدن اینکه یک خروجی چه اطلاعات و قابلیتهایی دارد، از Get-Member استفاده کنید:
Get-Process | Get-Member
(دربارهٔ آن علامت | در مرحلهٔ بعد کامل توضیح میدهیم.)
Get-Help را اجرا کنید، پاورشل ممکن است بپرسد آیا فایلهای راهنما را دانلود کند؛ با تایپ Y موافقت کنید تا راهنمای کامل روی سیستم شما ذخیره شود.
Get-Command *stop* را بزنید و ببینید آیا Stop-Service در فهرست هست.
در بیشتر خطفرمانهای قدیمی (مثل cmd یا حتی bash)، وقتی خروجی یک دستور را به دستور بعدی میفرستید، فقط متنِ ساده رد و بدل میشود — مثل اینکه یک برگهٔ کاغذ بدون هیچ برچسبی دستبهدست شود و دستور بعدی مجبور باشد حدس بزند کدام بخش از متن چه معنایی دارد.
پاورشل این کار را متفاوت انجام میدهد: هر خروجی، یک Object۴ کامل و برچسبدار است — دقیقاً مثل یک فرم پر شده با فیلدهای مشخص (نام، تاریخ، اندازه و…). وقتی این خروجی را با علامت | (به آن پایپلاین یا pipeline گفته میشود) به دستور بعدی میفرستید، آن دستور دقیقاً میداند هر فیلد چیست.
مثال این دستور، پنج برنامهای را که بیشترین حافظه را مصرف میکنند پیدا میکند:
Get-Process | Sort-Object WS -Descending | Select-Object -First 5 Name, WS
در این خط، سه cmdlet پشتسرهم با پایپلاین به هم وصل شدهاند: اول فهرست فرایندها را میگیرد، بعد بر اساس مصرف حافظه (WS) مرتب میکند، و در آخر فقط پنج مورد اول را با دو ستون «نام» و «مصرف حافظه» نمایش میدهد.
Get-Service | Where-Object Status -eq 'Running'
گام ۱ برای نگهداشتن یک مقدار برای استفادهٔ بعدی، از یک متغیر۵ استفاده کنید. نام هر متغیر در پاورشل با علامت $ شروع میشود:
$name = "علی"
Write-Host $name
گام ۲ برای نگهداشتن چند مقدار در کنار هم، از یک آرایه (Array) استفاده کنید:
$fruits = @("سیب", "موز", "پرتقال")
$fruits[0] # اولین عضو را نشان میدهد: سیب
گام ۳ برای نگهداشتن اطلاعات بهصورت جفت «کلید–مقدار»، از یک هشتیبل (Hashtable) استفاده کنید:
$user = @{ Name = "علی"; Role = "مدیر" }
$user.Name # علی
# در پاورشل یعنی «توضیح»؛ هرچه بعد از آن در همان خط بیاید اجرا نمیشود و فقط برای یادداشت شماست.
$age بسازید که مقدار سن شما را داشته باشد، سپس با Write-Host $age آن را چاپ کنید.
در این بخش، پرکاربردترین دستورهای پاورشل را دستهبندیشده میبینید. لازم نیست همه را حفظ کنید؛ کافی است بدانید برای هر نیاز باید دنبال چه چیزی بگردید.
| کار | دستور |
|---|---|
| دیدن محتوای پوشهٔ فعلی | Get-ChildItem (یا مخفف gci) |
| رفتن به یک پوشهٔ دیگر | Set-Location "C:\Path" (یا cd) |
| ساخت فایل یا پوشهٔ جدید | New-Item -ItemType File -Name "test.txt" |
| کپی کردن | Copy-Item source.txt dest.txt |
| جابهجایی/تغییر نام | Move-Item old.txt new.txt |
| حذف فایل یا پوشه | Remove-Item file.txt |
| خواندن محتوای یک فایل متنی | Get-Content file.txt |
| جستوجوی یک متن داخل فایلها | Select-String "کلمه" *.txt |
| کار | دستور |
|---|---|
| فهرست برنامههای در حال اجرا | Get-Process |
| بستن یک برنامه | Stop-Process -Name "notepad" |
| فهرست سرویسهای ویندوز | Get-Service |
| روشن/خاموش کردن یک سرویس | Start-Service / Stop-Service |
| اطلاعات کلی سیستم | Get-ComputerInfo |
| کار | دستور |
|---|---|
| تست اتصال به یک آدرس (مثل پینگ) | Test-Connection google.com |
| دانلود یک فایل از اینترنت | Invoke-WebRequest -Uri "..." -OutFile "file.zip" |
| کار | دستور |
|---|---|
| فیلتر کردن بر اساس شرط | Where-Object |
| مرتبسازی | Sort-Object |
| انتخاب چند ستون یا چند مورد اول | Select-Object |
| اجرای یک کار روی تکتک موارد | ForEach-Object |
| شمارش، جمع، میانگین | Measure-Object |
| دستهبندی بر اساس یک ستون | Group-Object |
Get-ChildItem | Where-Object Length -gt 1MB — این دستور فایلهای بزرگتر از یک مگابایت را در پوشهٔ فعلی نشان میدهد.
حالا که با پایهها آشنا شدید، این بخش چیزهایی را نشان میدهد که پاورشل را از یک ابزار «قابل استفاده» به یک ابزار «سریع و لذتبخش» تبدیل میکند.
ترفند ۱ — تکمیل خودکار وقتی چند حرف اول یک دستور یا مسیر فایل را تایپ میکنید، کلید Tab را بزنید؛ پاورشل بقیه را کامل میکند یا بین گزینهها میچرخد.
ترفند ۲ — پیشبینی هوشمند حین تایپ در PowerShell 7، وقتی شروع به تایپ دستوری کنید که قبلاً استفاده کردهاید، پیشنهاد آن بهصورت کمرنگ جلوی نشانگر ظاهر میشود؛ برای پذیرفتنش کافی است کلید → را بزنید.
ترفند ۳ — تاریخچهٔ دستورها با کلیدهای ↑ و ↓ بین دستورهای قبلی جابهجا شوید. برای دیدن کل تاریخچه:
Get-History
ترفند ۴ — نامهای مستعار (Alias) بسیاری از دستورهای آشنای دنیای cmd و Linux در پاورشل هم کار میکنند، چون در واقع نام مستعارِ همان cmdletها هستند:
| چیزی که تایپ میکنید | دستور واقعی |
|---|---|
ls یا dir | Get-ChildItem |
cd | Set-Location |
cat | Get-Content |
ps | Get-Process |
kill | Stop-Process |
برای دیدن نام واقعی پشتِ هر نام مستعار: Get-Alias ls
ترفند ۵ — فایل تنظیمات شخصی (Profile) پاورشل یک فایل ویژه دارد که هر بار باز شدن، خودکار اجرا میشود؛ میتوانید در آن نامهای مستعار دلخواه یا تنظیمات همیشگی خودتان را بنویسید:
# دیدن مسیر فایل پروفایل
$PROFILE
# باز کردن آن برای ویرایش (اگر وجود نداشت، اول بسازیدش)
notepad $PROFILE
ترفند ۶ — دسترسی به دنیای «.NET» پاورشل مستقیماً به کتابخانهٔ عظیم .NET مایکروسافت دسترسی دارد، یعنی میتوانید از قابلیتهای پیشرفتهٔ برنامهنویسی هم در دستورهای روزمره استفاده کنید — بدون اینکه نیاز باشد الان وارد جزئیاتش شوید.
Enter-PSSession است).Get-Pro) و کلید Tab را بزنید. اگر بهطور خودکار Get-Process کامل شد، این ترفند را یاد گرفتهاید.
گام ۱ یک فایل متنی جدید بسازید و پسوند آن را از .txt به .ps1 تغییر دهید — مثلاً salam.ps1. این پسوند به پاورشل میگوید که محتوای فایل، مجموعهای از دستورهای اجراشدنی است.
گام ۲ این چند خط را داخل فایل بنویسید و ذخیره کنید:
Write-Host "سلام از یک اسکریپت پاورشل"
Get-Date
گام ۳ برای اجرای فایل، در پنجرهٔ پاورشل به پوشهٔ فایل بروید و این را تایپ کنید:
.\salam.ps1
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
این تنظیم فقط اسکریپتهای نوشتهشده روی همین کامپیوتر را آزاد میکند و اسکریپتهای دانلودی از اینترنت را همچنان بررسی امضا میکند — پس اسکریپتی را که منبعش را نمیشناسید هرگز اجرا نکنید.
.\salam.ps1 پیام سلام و تاریخ امروز را دیدید، اولین اسکریپت خودتان را با موفقیت نوشته و اجرا کردهاید.
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Get-Command *بخشی-از-نام* نام دقیق را پیدا کنید.
.ps1 با دوبار کلیک اجرا نمیشود یا بلافاصله بسته میشود.\ صدا زده شود.winget شناخته نمیشودWhere-Object یا فیلتر، چیزی نشان نمیدهدGet-Member نام دقیق ستونها را بررسی کنید.
قدم بعدی پیشنهادی: کارهای تکراری روزمرهٔ خودتان روی کامپیوتر را فهرست کنید و سعی کنید برای هرکدام، معادل پاورشلیاش را با Get-Command پیدا کنید. سایر آموزشهای گراول در بخش «⚙️ اتوماسیون» و «💻 برنامهنویسی» میتوانند ادامهٔ طبیعی این مسیر باشند.