پاورشل برای برنامهنویسان
@programming_tipsدرسنامه: کار با دادهها در Pipeline
۱. انتخاب Propertyهای دلخواه — Select-Object
دستور Select-Object به شما امکان میدهد فقط ویژگیهای مورد نظر یک شی را نمایش دهید یا خروجی را محدود کنید.
مثال:
Get-Process | Select-Object -First 3
-First 3سه شی اول خروجی را میگیرد.
Get-Process | Select-Object ProcessName, Id
- فقط دو Property
ProcessNameوIdرا نمایش میدهد.
ویژگیهای پیشرفته
-Property: مشخص میکند چه ویژگیهایی نمایش داده شوند.-ExcludeProperty: ویژگیهای مشخص شده را حذف میکند.-Unique: خروجی یکتا برمیگرداند.
Get-Service | Select-Object -Property Name, Status -Unique
۲. فیلتر کردن اشیا — Where-Object
Where-Object اجازه میدهد فقط اشیائی که شرایط مشخصی دارند عبور کنند. برای ارزیابی شرط، از متغیر خودکار $_ استفاده میکنیم که به شی فعلی در Pipeline اشاره دارد.
مثال:
Get-Process | Where-Object { $_.CPU -gt 50 }
- این دستور فقط فرآیندهایی را نشان میدهد که CPU بیشتری از 50 مصرف میکنند.
Get-Service | Where-Object { $_.Status -eq "Running" }
- فقط سرویسهای در حال اجرا را نمایش میدهد.
نکات:
-eq,-ne,-gt,-lt,-ge,-leعملگرهای مقایسهای هستند.- شرط میتواند ترکیبی باشد:
Get-Process | Where-Object { $_.CPU -gt 50 -and $_.Handles -gt 1000 }
۳. اجرای دستور روی هر شی — ForEach-Object
ForEach-Object اجازه میدهد روی هر شی در Pipeline عملیات خاصی انجام دهید.
مثال ساده:
Get-Process | ForEach-Object { $_.ProcessName }
- نام همه فرآیندها را چاپ میکند.
Get-Service | ForEach-Object {
if ($_.Status -eq "Running") {
Write-Output "$($_.Name) is running"
}
}
- این دستور برای هر سرویس وضعیت آن را بررسی و چاپ میکند.
تفاوت Where-Object و ForEach-Object
Where-Object: فیلتر میکند، یعنی فقط اشیاء مطابق شرط را عبور میدهد.ForEach-Object: کاری روی هر شی انجام میدهد، میتواند اشیاء را تغییر دهد، چاپ کند یا خروجی جدید تولید کند.
ترکیب دستورات
PowerShell قدرتمند است چون میتوان این دستورات را با هم ترکیب کرد:
Get-Process |
Where-Object { $_.CPU -gt 50 } |
Select-Object -Property ProcessName, CPU |
ForEach-Object { Write-Output "Process $($_.ProcessName) uses $($_.CPU) CPU" }
در این مثال:
- ابتدا فرآیندهایی که CPU زیادی مصرف میکنند فیلتر میشوند.
- سپس فقط ویژگیهای
ProcessNameوCPUانتخاب میشوند. - در نهایت برای هر شی پیغام مشخصی چاپ میشود.
جمعبندی
- Select-Object: انتخاب ویژگیهای خاص از هر شی
- Where-Object: فیلتر کردن اشیاء بر اساس شرط
- ForEach-Object: اجرای دستورات روی هر شی
با ترکیب این سه دستور، میتوان خروجیهای پیچیده را به راحتی پردازش و تبدیل کرد بدون اینکه نیازی به نوشتن حلقههای طولانی یا پردازش متن باشد.
✨ تمرین پیشنهادی:
- خروجی
Get-Serviceرا بگیر و فقط سرویسهایی که در حال اجرا هستند را باWhere-Objectنمایش بده. - از
Select-Objectاستفاده کن و فقط نام و وضعیت آنها را چاپ کن. - با
ForEach-Objectبرای هر سرویس پیام بده:"Service <Name> is <Status>".