پاورشل برای برنامهنویسان
@programming_tipsدرسنامه: Pipeline (|) و کار با خروجی دستورات
۱.آشنایی با مفهوم Pipeline
در PowerShell، Pipeline با نماد | نشان داده میشود و به شما اجازه میدهد خروجی یک Cmdlet را مستقیماً به Cmdlet بعدی بدهید.
به عبارت سادهتر:
- اول Cmdlet یک شی برمیگرداند.
- شما آن شی را به Cmdlet دوم میدهید تا روی آن پردازش انجام دهد.
این امکان باعث میشود کارهای پیچیده بدون ذخیره موقت دادهها و به صورت خطی انجام شوند.
۲. تفاوت Pipeline در PowerShell با Bash یا CMD
- در Bash و CMD، Pipeline معمولاً متن میفرستد (text-based).
- در PowerShell، Pipeline اشیاء (Objects) میفرستد.
این یعنی شما میتوانید مستقیماً با ویژگیها و متدهای اشیاء کار کنید، نه فقط متن خروجی را پردازش کنید.
۳. نمونههای ساده Pipeline
مثال ۱: نمایش پروسهها به ترتیب مصرف CPU
Get-Process | Sort-Object CPU -Descending
Get-Processلیست پروسهها را برمیگرداند.Sort-Object CPU -Descendingآنها را بر اساس مصرف CPU به صورت نزولی مرتب میکند.
مثال ۲: انتخاب فقط نام و پردازنده پروسهها
Get-Process | Select-Object ProcessName, CPU
Select-Objectفقط پراپرتیهای مشخص شده را نشان میدهد.
مثال ۳: فیلتر کردن خروجی
Get-Process | Where-Object {$_.CPU -gt 100}
Where-Objectخروجی را بر اساس شرط شما فیلتر میکند.$_نماینده هر شیء در Pipeline است.- این دستور تمام پروسههایی که CPU بیشتری از 100 دارند را نشان میدهد.
۴. ترکیب چند Pipeline
پاورشل اجازه میدهد چند Cmdlet را پشت سر هم در یک خط ترکیب کنید:
Get-Process | Where-Object {$_.CPU -gt 100} | Sort-Object CPU -Descending | Select-Object -First 5
- ابتدا پروسههایی که CPU > 100 دارند انتخاب میشوند.
- سپس آنها بر اساس CPU مرتب میشوند.
- در نهایت فقط ۵ پروسه اول نمایش داده میشوند.
این یکی از بزرگترین قدرتهای PowerShell است: اجرای چند مرحله پردازش به شکل خطی و بدون ایجاد فایل موقت.
۵. نکات مهم Pipeline
- هر چیزی در Pipeline یک شی است، نه متن. بنابراین میتوانیم پراپرتیها و متدهای آن را مستقیماً دستکاری کنیم.
- Pipeline سرعت و خوانایی کد را بالا میبرد.
- میتوان از Pipeline در اسکریپتها و Automation هم استفاده کرد، نه فقط در محیط CLI.
- برای درک بهتر Pipeline، همیشه ابتدا با
Get-Memberخروجی Cmdlet اول را بررسی کنید.
مثال:
Get-Process | Get-Member
با این کار میفهمید هر شی چه پراپرتیها و متدهایی دارد و میدانید روی چه چیزی میتوانید عملیات بعدی را انجام دهید.
۶. تمرین برای شما
۱. لیست فایلهای یک پوشه را بگیرید و فقط فایلهای .txt را نشان دهید:
۲. آنها را بر اساس اندازه (Length) مرتب کنید و ۳ فایل بزرگ را نمایش دهید:
۳. خروجی را به یک فایل CSV ذخیره کنید تا بعداً بتوانید از آن استفاده کنید:
🔑 خلاصهی درسنامه:
- پس Pipeline با نماد
|خروجی یک Cmdlet را به Cmdlet بعدی میدهد. - در PowerShell، Pipeline اشیاء میفرستد، نه فقط متن.
- ترکیب Pipelineها باعث اجرای پردازشهای پیچیده و خوانا میشود.
- استفاده از Pipeline همراه با
Where-Object,Select-Object,Sort-ObjectوGet-Memberقدرت واقعی PowerShell را نشان میدهد.