۲۰ فرمان ضروری PowerShell برای توسعهدهنده
بیست cmdlet و الگوی ضروری PowerShell برای فایل، فرایند، شبکه، سرویس، env و عیبیابی روزانه توسعهدهنده — با مثال قابلاجرا.
بنیانگذار و مهندس محصول

حفظ صدها cmdlet بیفایده است. آنچه سرعت روزانه میدهد مجموعهای کوچک از فرمانهاست که فایل، فرایند، سرویس، شبکه و محیط را پوشش میدهد. این مقاله بیست مورد را با مثال واقعی میآورد؛ هرکدام را در Windows Terminal روی ماشین خودتان اجرا کنید تا مدل شیء زیر انگشتتان بنشیند.
قبل از لیست: Get-Help و Get-Command را عادت کنید. مستند همراه، بهتر از کپی کور از وب است.
powershell
Get-Help Get-Process -Examples Get-Command *Process*

پاسخ کوتاه
برای کار روزمرهٔ توسعهدهنده روی ویندوز، این بیست الگو بیشترین بازگشت را دارند: کشف فرمان، کار با فایل و محتوا، فرایند و پورت، سرویس، متغیر محیطی، شبکهٔ پایه، و خروجی ساختیافته. بهجای معادلسازی اجباری با bash، یاد بگیرید روی شیء Select و Where بزنید.
۱) Get-Help — خواندن راهنما
powershell
Get-Help Get-ChildItem -Full Get-Help Get-ChildItem -Examples Update-Help -ErrorAction SilentlyContinue
بدون این عادت، هر فرمان بعدی حفظی میماند. اگر کمک آنلاین کامل نیست، Update-Help را با دسترسی مناسب امتحان کنید.
۲) Get-Command — پیدا کردن خود فرمان
powershell
Get-Command Get-ChildItem Get-Command *item* Get-Command -Verb Get -Noun *Service*
وقتی نمیدانید اسم دقیق چیست، با الگوی Verb-Noun جستجو کنید.
۳) Get-ChildItem — فهرست فایل و پوشه
powershell
Get-ChildItem Get-ChildItem -Recurse -Filter *.ts Get-ChildItem Env:
معادل عملی dir/ls با فیلتر قوی. Providerها مثل Env: نشان میدهند همهچیز «درایو» نیست.
۴) Set-Location — تغییر پوشه
powershell
Set-Location C:\projects\api Get-Location # Alias رایج: cd
ساده است؛ در اسکریپت بهجای فرض پوشهٔ جاری، صریح باشید.
۵) Get-Content و Set-Content — خواندن و نوشتن متن
powershell
Get-Content .\appsettings.json -Raw Get-Content .\log.txt -Tail 50 -Wait 'Sample' | Set-Content .\note.txt -Encoding utf8
برای لاگ زنده Tail و Wait مفید است. Encoding را در فایلهای فارسی جدی بگیرید.
۶) Select-String — جستجو در متن
powershell
Select-String -Path .\*.log -Pattern 'ERROR' Get-ChildItem -Recurse -Filter *.cs | Select-String 'TODO'
نزدیک به grep برای جریان کار ویندوزی؛ روی شیء فایل هم پایپ میشود.
۷) Copy-Item، Move-Item، Remove-Item
powershell
Copy-Item .\config.example.json .\config.json Move-Item .\old.txt .\archive\ Remove-Item .\tmp\* -Recurse -WhatIf
قبل از حذف مخرب، WhatIf را عادت کنید. Recurse را بیگارد استفاده نکنید.
۸) New-Item — ساخت فایل یا پوشه
powershell
New-Item -ItemType Directory -Path .\artifacts -Force New-Item -ItemType File -Path .\artifacts\.keep -Force
۹) Get-Process — دیدن فرایندها
powershell
Get-Process Get-Process -Name node -ErrorAction SilentlyContinue Get-Process | Sort-Object CPU -Descending | Select-Object -First 8
جزئیات بیشتر در مقالهٔ مدیریت فرایند.
۱۰) Stop-Process — پایاندادن به فرایند
powershell
Stop-Process -Name notepad -ErrorAction SilentlyContinue Stop-Process -Id 12345 -Force
Force معادل خشنتری است؛ اول بدون آن و با تشخیص PID درست تلاش کنید. سرویسها را ترجیحاً با Stop-Service مدیریت کنید.
۱۱) Get-Service و Start/Stop/Restart-Service
powershell
Get-Service -Name w3svc -ErrorAction SilentlyContinue Get-Service | Where-Object Status -eq 'Running' | Select-Object -First 10 # Restart-Service -Name 'MyApp' # با مجوز و تشخیص نام درست
۱۲) Get-NetTCPConnection — پورت و اتصال
powershell
Get-NetTCPConnection -LocalPort 3000 -ErrorAction SilentlyContinue | Select-Object LocalAddress,LocalPort,State,OwningProcess Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess
جایگزین ساختیافته برای بخش زیادی از netstat روزمره.
۱۳) Test-NetConnection — تست شبکه
powershell
Test-NetConnection www.microsoft.com -Port 443 Test-NetConnection localhost -Port 5432
برای تشخیص سریع «پورت گوش میدهد یا نه» و مسیر شبکه مفید است.
۱۴) Invoke-WebRequest / Invoke-RestMethod
powershell
Invoke-RestMethod https://api.github.com/zen (Invoke-WebRequest https://example.com).StatusCode
برای API، RestMethod مستقیم شیء JSON میسازد. اگر باینری curl.exe میخواهید، صریح صدا بزنید.
۱۵) Get-ChildItem Env: و $Env: — متغیر محیطی
powershell
Get-ChildItem Env: | Sort-Object Name $Env:PATH -split ';' | Select-Object -First 10 $Env:NODE_ENV = 'development'
مقدار $Env در نشست جاری است؛ پایدار کردن سطح User/Machine داستان جداست.
۱۶) [System.Environment]::GetEnvironmentVariable
powershell
[System.Environment]::GetEnvironmentVariable('PATH','User') [System.Environment]::GetEnvironmentVariable('PATH','Machine')
برای دیدن تفاوت User و Machine ضروری است؛ فقط نگاه کردن به $Env:PATH کافی نیست.
۱۷) Select-Object و Where-Object — شکلدهی خروجی
powershell
Get-Process | Where-Object { $_.WorkingSet64 -gt 100MB } | Select-Object Name, Id, @{n='WS_MB';e={[math]::Round($_.WorkingSet64/1MB,1)}}
این دو cmdlet قلب پایپلاین روزمرهٔ شما هستند.
۱۸) ConvertTo-Json و ConvertFrom-Json
powershell
Get-Process -Name explorer | Select-Object Name,Id | ConvertTo-Json '{"a":1}' | ConvertFrom-Json | Select-Object -ExpandProperty a
برای لاگ ساختیافته و حرف زدن با APIهای داخلی تیم حیاتی است.
۱۹) Get-WinEvent — خواندن لاگ رویداد
powershell
Get-WinEvent -LogName Application -MaxEvents 5 Get-WinEvent -FilterHashtable @{LogName='System'; Level=2; StartTime=(Get-Date).AddHours(-6)} -MaxEvents 10
۲۰) Export-Csv و Out-File — ذخیرهٔ خروجی
powershell
Get-Service | Select-Object Name,Status,StartType | Export-Csv .\services.csv -NoTypeInformation -Encoding utf8 Get-ChildItem | Out-File .\listing.txt -Encoding utf8
برای اشتراک با تیم غیرتوسعهدهنده CSV طلاست. Encoding را صریح بگذارید.
چطور تمرین کنید تا در حافظه بماند؟
- یک روز فقط با PowerShell فایل پروژه را جابهجا و جستجو کنید.
- یک پورت توسعه را پیدا و فرایندش را با نام بشناسید.
- وضعیت یک سرویس محلی دیتابیس را با Get-Service بخوانید.
- PATH سطح User و Machine را چاپ و مقایسه کنید.
- ۵ خطای آخر Application را با Get-WinEvent بکشید.
جدول میانبر ذهنی
| هدف | فرمان |
|---|---|
| کمک | Get-Help / Get-Command |
| فایل | Get-ChildItem / Get-Content / Select-String |
| فرایند | Get-Process / Stop-Process |
| پورت | Get-NetTCPConnection |
| سرویس | Get-Service / Restart-Service |
| محیط | $Env: / System.Environment |
| لاگ | Get-WinEvent |
| خروجی | Select-Object / ConvertTo-Json / Export-Csv |
اشتباههای رایج
- استفاده از curl بدون Get-Command و تعجب از رفتار Alias.
- حذف Recurse بدون WhatIf.
- Stop-Process روی فرایند سرویس بهجای Stop-Service.
- فرض اینکه تغییر $Env:PATH دائمی است.
- کپی اسکریپت bash و انتظار اجرای بدون تغییر.
سوالات متداول
باید هر ۲۰ تا را حفظ کنم؟
الگو را حفظ کنید؛ جزئیات پارامتر را با Get-Help به خاطر بیاورید.
روی PowerShell ۵.۱ هم کار میکنند؟
بیشترشان بله. بعضی مثل رفتار ماژول شبکه یا جزئیات Get-WinEvent را در نسخهٔ خودتان با Help چک کنید.
معادل ls و grep چیست؟
اغلب Get-ChildItem و Select-String؛ ولی مدل شیء را در اولویت بگذارید نه فقط اسم.
اگر راهحل شما تغییر سطح Machine بود، بگویید چرا User کافی نبود. اگر Force کردید، بگویید چرا توقف ملایم شکست. این انضباط کوچک کیفیت عملیاتی تیم را بالا میبرد.
قبل از اینکه مشکل را بستهشده اعلام کنید: نشست جدید را تست کنید، مسیر یا پورت یا سرویس را دوباره با ابزار ساختیافته تأیید کنید، و یک خط در یادداشت تیمی بنویسید که علت ریشهای چه بود. بدون این سه قدم، همان تیکت هفتهٔ بعد برمیگردد.
چکلیست پایانی قبل از بستن تیکت
WhatIf و Confirm روی فرمانهای مخرب را جدی بگیرید. Remove-Item -Recurse بدون فیلتر دقیق یکی از رایجترین حوادث محلی است.
Invoke-WebRequest و RestMethod به همان اندازه که راحتاند میتوانند راز را در تاریخچه یا لاگ بنویسند. توکن را در خط فرمان خام نگذارید. فایلهای csv خروجی را اگر شامل مسیر سرویس یا حساب هستند در جای امن نگه دارید.
امنیت کوچک ولی مهم
وقتی اسکریپت مینویسید، نامهای Verb-Noun را رعایت کنید تا همکار PowerShellدان سریع بخواند. از Alias در اسکریپتهای ماندگار پرهیز کنید؛ Alias برای تعاملی خوب است، برای ریپو مبهم.
پیدا کردن فایل اخیراً تغییرکرده، کشتن فرایند مشخص، تست پورت محلی، خواندن پنج خطای آخر، و چاپ PATH سطح User را هر روز یکبار در هفته اول تمرین کنید تا حافظهٔ عضلانی بسازد. فهرست بیستتایی بالا برای همین طراحی شده نه برای مطالعهٔ منفعل.
ترکیبهای روزمره که ارزش تمرین دارند
پایپلاین را با Select-Object در پایان عادت کنید تا خروجی شلوغ نشود. برای اشتراک با همکار غیرتوسعهدهنده Export-Csv را ترجیح دهید. برای لاگ ماشینخوان ConvertTo-Json مناسبتر است.
برای هر cmdlet سه چیز را در خاطر بسپارید: چه ورودی میگیرد، چه شیئی برمیگرداند، و خطرناک است یا نه. Get-Help -Examples را روی همان ماشین بخوانید چون نسخه و ماژول ممکن است پارامتر را عوض کرده باشد. وقتی چیزی را پیدا نمیکنید، Get-Command با وایلدکارد سریعتر از جستوجوی وب است.
الگوی یادگیری بهجای حفظ پارامتر
نسخهبندی اسکریپتهای عیبیابی را جدی بگیرید. یک gist شخصی یا پوشه در ریپو داخلی با تاریخ و پیشفرضهای ایمن، بهتر از حافظهٔ شفاهی است.
مستند رسمی را نخواندن و اعتماد به اولین نتیجهٔ جستجو، اجرای همیشگی Elevated، و تغییر Machine برای مشکل User، سه الگوی پرهزینهاند. هزینهٔ واقعیشان معمولاً ساعتها بعد معلوم میشود؛ وقتی محیط برای همکار یا CI میشکند.
اشتباههای سطح بالاتر
در پایان تمرین، همه چیز را به حالت اول برگردانید: فرایند تست را ببندید، متغیر موقت را رها کنید، و سرویس را اگر تغییر دادید به Startup Type قبلی برگردانید. پاکسازی بخشی از حرفهایگری است.
یک سرور محلی بالا بیاورید، پورتش را پیدا کنید، فرایند را بشناسید، یک متغیر محیطی موقت ست کنید، PATH را فقط مشاهده کنید بدون تغییر مخرب، وضعیت یک سرویس بیخطر را بخوانید، و پنج رویداد اخیر Application را ببینید. این مدار بسته، دانش را از حالت خواندنی به حالت عضلانی میبرد.
تمرین پیشنهادی سیدقیقهای
اگر از لینوکس آمدهاید، معادل ذهنی بسازید ولی فرمان را عیناً ترجمه نکنید. مدل سرویس ویندوز با systemd شباهت مفهومی دارد و تفاوت ابزاری. مدل env با export شباهت دارد و تفاوت سطح Machine و User.
مفاهیم این مقاله را با Terminal، PowerShell، فرایند، پورت، env، PATH، سرویس و Event Viewer بهصورت حلقه ببینید نه جزایر جدا. بیشتر تیکتهای واقعی دو یا سه حلقه از این زنجیره را درگیر میکنند.
ارتباط با بقیهٔ سری ویندوز
تفاوت محیط خانگی و لپتاپ سازمانی را دستکم نگیرید. آنتیویروس، پروکسی، و سیاست اجرای اسکریپت رفتار ابزارها را عوض میکنند. اگر فقط روی یک ماشین تست میکنید، نتیجه را حقیقت مطلق ندانید.
هر بار که راهحل موقتی پیدا میکنید، همان را به یک فرمان قابلکپی در یادداشت شخصی تبدیل کنید. هفتهٔ بعد همان فرمان را از حافظه نمینویسید؛ از دفترک میآورید و خطا کمتر میشود.
در کار واقعی، مشکلها ترکیبیاند: پورت اشغال، PATH کهنه، سرویس متوقف، و ترمینال با پروفایل غلط همزمان ظاهر میشوند. بهجای تغییر همزمان همه چیز، یک متغیر را ثابت نگه دارید و فقط یک فرض را آزمایش کنید. این نظم علمی سرعت عیبیابی را بیشتر از هر میانبر افزایش میدهد.
عمق عملی بیشتر برای کار روزانه
خلاصه
بیست فرمان بالا پوشش عملی فایل، فرایند، پورت، سرویس، env، شبکه، لاگ و خروجی ساختیافته را میدهند. با Get-Help شروع کنید، روی شیء Where/Select بزنید، و برای کارهای مخرب WhatIf را فراموش نکنید. مرحلهٔ بعد: مدیریت فرایند را عمیقتر ببینید.
منابع و مراجع
- Microsoft Learn — Get-Help — https://learn.microsoft.com/powershell/module/microsoft.powershell.core/get-help
- Microsoft Learn — Get-Process — https://learn.microsoft.com/powershell/module/microsoft.powershell.management/get-process
- Microsoft Learn — Get-Service — https://learn.microsoft.com/powershell/module/microsoft.powershell.management/get-service
- Microsoft Learn — Get-NetTCPConnection — https://learn.microsoft.com/powershell/module/nettcpip/get-nettcpconnection
- Microsoft Learn — Get-WinEvent — https://learn.microsoft.com/powershell/module/microsoft.powershell.diagnostics/get-winevent
- Microsoft Learn — about_Environment_Variables — https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_environment_variables
نویسنده
سهیل ابراهیمپور بنیانگذار FutureForge است. روی طراحی محصول، معماری و استقرار نرمافزار سفارشی کار میکند.
یادداشتهای مرتبط
اگر در انتخاب معماری یا مسیر توسعه مطمئن نیستید، میتوانید درباره پروژه صحبت کنیم.
مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ میکنیم.




