قسمت ششم : شخصی سازی خروجی دستورات

0 42

سلام خدمت همه TheWays های عزیز، مباحثی که در این مقاله مورد بررسی قرار میگیرد شامل Sort، Select و Format است. که بیشتر مربوط به Customize کردن خروجی در پاورشل است و از اهمیت بالایی دارد، به این دلیل که شما بعضی اوقات نیازی به دیدن همه خصوصیات در خروجی نیستید و فقط به دنبال دو یا چند مورد خاص هستید.

 

Sort-Object

با استفاده از این دستور ما می توانیم بر اساس Property مورد نظر، نتایج خروجی را به ترتیب نشان دهیم. به مثال زیر دقت کنید :

می توانید از Sort به جای Sort-Object استفاده کنید به عنوان Alias این دستور.

نکته : بصورت دیفالت دستور Sort بصورت Ascending نتایج را مرتب می کند ولی اگر بخواهیم بصورت Descending این کار را انجام دهد باید از پارامتر آن استفاده کنیم که من در مثال بالا همین کار را انجام دادم.

Ascending = صعودی   ،    Descending = نزولی

پارامتر -Unique هم برای این است که نتایج همانند هم را نشان ندهد و فقط یکی از چند object که تشابه دارند را نشان دهد. به نتایج دستور زیر دقت کنید :

Get-Process

برای جلوگیری از نشان دادن process های همنام می توانیم از Unique- استفاده کنیم :

Get-Process | sort -Unique

 

Select-Object

دستور Select-Object یا Select که Alias این دستور می باشد، توانایی جدا کردن و انتخاب Property هایی که ما می خواهیم را دارد. یعنی فقط Property هایی را در خروجی نشان می دهد که ما انتخاب می کنیم. البته قابلیت های بیشتر دیگری هم دارد که در مثال های زیر با آن آشنا می شویم. به مثال های زیر دقت کنید :

استفاده از First, -Last- : پنج مقدار اول و آخر را خروجی میگیرند :

نکته :

در این دستور نیز می توانیم از پارامتر -Unique استفاده کنیم همانند زمانیکه در Sort استفاده می کردیم.

 

استفاده از -ExpandProperty :

این پارامتر برای نشان دادن نتایج یک Property خاص بصورت کامل و با جزئیات است.برای مثال وقتی در خروجی یک دستور، یکی از Property ها بصورت آرایه ای است و چندین مقدار دارد و نمی توان همه آن را در صفحه پاورشل نشان داد می توانیم از این دستور برای مشاهده همه مقدار ها در آن Property استفاده کنیم.

برای درک بهتر مثال زیر را ببینید که بدون ExpandProperty خروجی گرفته شده است :

در مثال بالا Property که برای نشان دادن نتایجی است که یوزر مورد نظر در کدام گروه ها عضو است، که نتیجه دلخواه ما را نشان نداده است ولی به عکس زیر توجه کنید :

 

استفاده از Select برای Calculated Properties با استفاده از Hash Table :

در بعضی از موارد پاورشل نتایج را بصورتی که ما انتظار داریم یا علاقه داریم نشان نمی دهد. برای اینکه ما بتوانیم نام و یا مقداری که در Property است را تغییر دهیم می توانیم از روش Hash Table استفاده کنیم که بصورت زیر انجام می شود :

Syntax مورد استفاده از Hash Table چگونه است؟

اگر دقت کنید هر Hash Table با علامت “@” نشان داده می شود و دستورات آن نیز درون براکت نوشته می شود.

Name یا Label : برای مشخص کردن اسمی که قرار است در خروجی نمایش داده شود.

که می توانیم از “N” , “L” نیز برای راحتی کار استفاده کنیم.

Expression : همانطور که مشاهده می کنید دستورات مربوط به Expression در داخل براکت نوشته می شود. اما این قسمت ما باید Property مورد نظر خود را که می خواهیم در اسم آن و یا مقدار آن تغییرات ایجاد کنیم را مشخص کنیم که با “ ._$“ شروع می شود.

بعد از “ ._$ “ باید اسم Property را مشخص کنیم که در اینجا اسم Property ما در کامند قبل Size بود که بصورت زیر نوشته شد :

Size._$

دلیل استفاده از “ ._$ “ چیست؟

شاید برای شما سوال باشد که مفهوم این عبارت چیست و در کدام قسمت هایی از پاورشل مورد استفاده است. این عبارت در هر موقعیتی از پاورشل نه فقط در Hash Table ها مورد استفاده است. اما مفهوم کلی “ ._$“ به این معنا است که، ما به پاورشل می گوییم به دنبال Property هایی بگرد که از PipeLine های قبل وارد این PipeLine شده است. با این کار پاورشل متوجه می شود که Property مورد نظر ما برای این کامندی که در PipeLine وجود دارد نیست، بلکه برای Property هایی است که از PipeLine های قبلی وارد این قسمت شده است.

تغییر واحد نمایش اعداد چیست؟

در این دستور تمامی اعدادی که در خروجی دیفالت پاورشل به ما نمایش داده می شود با واحد “KB” است که برای ما مناسب نیست و برای تبدیل آن به واحد “MB” یا “GB” باید مانند مثال بالا از دستور زیر استفاده کنیم :

Size/1MB      OR      $_.Size/1GB._$

دلیل استفاده از [int] چیست؟

برای اینکه اعداد رند نمایش داده شوند و اعداد اعشاری اضافه ای وجود نداشته باشد، ما از پارامتر “ as “ بصورت زیر استفاده کردیم :

Size/1MB -as [int]._$

دوستان دقت کنید که ما در ادامه خیلی بیشتر راجع به Hash Table صحبت خواهیم کرد و اینکه در چه موقعیت های دیگری مورد استفاده قرار می گیرد، که بسیار مهم و کاربردی است.

 

استفاده از Measure-Object

این کامند برای شمارش Object ها بکار می رود. که از پارامتر های Average, Maximum, Minimum, Sum استفاده می کند. به مثال زیر دقت کنید :

مثال بالا بر اساس Property که ما مشخص کردیم یعنی “ Size(MB) “ نتایج را به ما نشان داد.

استفاده از دستورات Export و Convert

خیلی از مواقع پیش می آید که شما می خواهید از نتیجه دستورات یک خروجی با فرمت های مورد نیاز بگیرید.

استفاده از Export-CSV :

با استفاده از این دستور شما یک فایل آماده با پسوند .CSV خروجی میگیرید. به مثال زیر دقت کنید :

پارامتر های مهم این دستور :

Append :

اگر از این پارامتر استفاده کنیم، اگر فایلی که در قسمت Path نوشته ایم در آن اطلاعاتی باشد آن ها را پاک نمی کند و این اطلاعات فقط به انتهای آنها اضافه می کند. پاورشل بصورت دیفالت اگر در فایل مقصد اطلاعاتی باشد آنها  را با اطلاعات جدید Replcae می کند.

Delimiter :

در CSV تمام ستون ها همانطور که قبلا گفته شد با استفاده از “ , “ از هم جدا می شوند. اگر بخواهیم این مشخصه جدا سازی تغییر دهیم می توانی از این پارامتر به صورت زیر استفاده کنیم :

NoClobber :

اگر اطلاعاتی در فایل مقصد باشد آنها را پاک نمی کند تا اطلاعات جدید را در آن قرار دهد.

LiteralPath :

تفاوتش با Path در این است که این آدرس باید دقیقا به فایل مقصد اشاره کند و شامل WildCard نباشد.

Force :

اگر بر روی فایل مقصد Read Only Attribute فعال بود، میتوانیم از این دستور استفاده کنیم تا دیتای مورد نظر ما بدون در نظر گرفتن Read Only Attribute بر روی آن فایل قرار بگیرد.

NoTypeInformation :

توضیحات بالای فایل را که پاورشل اضافه می کند را در فایل خروجی اضافه نمی کند :

استفاده از Export-Clixml :

بصورت زیر Export گرفته می شود :

استفاده از Out-File :

همچنین می توانیم از کاراکتر “ < “ برای راحتی کار نیز استفاده کنیم. اما خروجی این دستور نیز یک فایل “ .txt “ می باشد که نحوه نوشتن ان نیز به شکل زیر است :

پارامتر های این دستور شبیه به Export-CSV می باشد که در مورد آنها توضیح داده شد اما پارامتر زیر را دقت کنید :

NoNewline : همه نتایج را در یک خط نمایش می دهد.

NoOverwrite : چیزی را پاک نمی کند در فایل مقصد.

استفاده از سری دستورات ConvertTo :

ما با استفاده از دستورات ConvertTo  توانایی تبدیل این فایل ها را به یکدیگر داریم. برای مثال تبدیل CSV به HTML یا برعکس و همچنین موارد دیگر که اگر به عکس زیر دقت کنید متوجه خواهید شد :

که برعکس همین را هم می توانید انجام دهید. مانند ConvertTo-CSV و موارد دیگر که با گرفتن help می توانید آنهارا پیدا کنید. اما مهمترین دستورات همین دستوراتی بود که گفته شد.

 

استفاده از دستورات Format :

نکته مهم که در اول توضیحات باید به آن اشاره شود این است که، انواع دستورات Format برای استفاده شدن در هر سری از دستورات پاورشل، باید به عنوان آخرین قسمت یک کامند در نظر گرفته شوند. یا همانطور که مایکروسافت می گوید :

.Where you can Format Right

در ادامه این مطلب دلیل انجام این کار را متوجه خواهید شد.

 

انواع دستورات Format :

 :Format-List

این دستور که Alias آن fl است، خروجی دستورات را بصورت لیست برای ما نشان می دهد. مثال های مهم از این دستور را مشاهده می کنید :

در اینجا تمام Property های کامند قبل را نشان می دهد.

برای مثال می توانی از قابلیت GroupBy این کامند نیز استفاده کنیم :

نکته : اما باید قبل از آن نتایج را همانطور که یاد گرفتیم Sort کنیم.

در GroupBy ما نتایج را بر اساس یک Property می توانیم گروه بندی کنیم. که در مثال بالا ما بر اساس Status سرویس ها آن ها را Group کرده ایم، یعنی Stopped و Running که به دو گروه تقسیم می شود.

 

Format-Table :

بصورت جدول خروجی را نشان میدهد. تفاوتش با Format-List در داشتن چند پارامتر بیشتر است. Alias این دستور نیز ft است.

AutoSize- : تا جایی که لازم هست و امکانش وجود دارد ستون را بزرگ تر می کند تا تمام اطلاعات نمایش داده شوند.

Wrap- : وقتی به انتها صفحه میرسد، ادامه اطلاعات را به خط پایین منتقل می کند.

مثال :

درباره Get-wmiObject در ادامه مقالات توضیح کامل داده می شود.

 

Format-Wide :

برخلاف دو دستور قبلی این دستور فقط می تواند یک پارامتر را نشان دهد برای درک بهتر به مثال زیر توجه کنید :

همانطور که میبینید اگر از یک Property بیشتر معرفی کنیم ارور میدهد.

 

دلیل Format Right چیست؟

به این دلیل است که وقتی ما از سری دستور های Format استفاده می کنیم، درواقع داریم Object ها را از حالت عادی و استاندارد خارج می کنیم و دیگر نمی توانیم در ادامه PipeLine از آنها استفاده کنیم. حتی نمی توانیم خروجی های “CSV” , “XML” ,.. بگیریم چون همانطور که در عکس زیر مشاهده می کنید، قابل خواندن و استفاده کردن نخواهد بود :

اما راه حل خروجی گرفتن نتایج دستورات Format چیست؟

ما اگر از هر کدام سری دستورات Out استفاده بکنیم، می توانیم از این Format ها خروجی قابل فهم و مورد استفاده بگیریم. سری دستورات Out را در عکس زیر مشاهده می کنید :

که ما از Out-File استفاده می کنیم. به شکل زیر :

 

توضیحات Comparison Operators

در هر زبان برنامه نویسی و یا هر زبان کدنویسی ما نیاز به کاراکتر هایی داریم تا برای ما عملیات های مختلف مقایسه را انجام بدهند. البته در اکثر زبان ها، تقریبا از یک سری کاراکتر های مشخص برای انجام مقایسه استفاده می شود ولی در پاورشل این کاراکتر ها بصورت پارامتر هستند و با هر زبان دیگری تفاوت دارند.

شما می توانید با دستور زیر، توضیحات کامل درباره این کاراکتر ها از پاورشل ببینید و مطالعه کنید.

help about_Comparison_Operators

این دستورات در عملیاتی مانند Filter کردن و یا عملیات های ForEach, For, Switch, DoWhile هم مورد استفاده قرار می گیرند.

نکته مهم : این Operator ها Case sensitive نیستند و اگر شما بخواهید آن ها را Case sensitive بکنید باید در ابتدای آن ها کلمه “ C “ را اضافه کنید. مانند :

.., Ceq , -Cgt , -Cmatch-

 

نحوه استفاده از Where-Object

این دستور برای Filter کردن اطلاعات و مقادیر بکار می رود. استفاده از Where-Object را در دو Syntax می توان استفاده کرد.

Alias های این دستور نیز بصورت زیر است :

Where-Object \ Where \ ?

 

Basic Filtering Syntax :

برای فیلتر های ساده استفاده می شود. به مثال زیر دقت کنید :

 

Advanced Filtering Syntax :

این Syntax برای زمانی استفاده می شود که ما نیاز به فیلتر پیچیده تر و اعمال فیلتر بر روی چند Property داریم. که بصورت زیر انجام می شود :

 

نکته مهم :

پیشنهاد مایکروسافت در اعمال فیلتر بر روی مقادیر این است که، تا جایی که می شود ما عملیات فیلتر بر روی دیتا را زود تر انجام دهیم. یعنی :

Where You Can Filter Left

مثلا ما در مثال زیر می توانیم زودتر فیلتر مورد نظر را اعمال کنیم و باید این کار را انجام دهیم. چون دستور Get-ADUser خودش پارامتر Filter دارد :

در نتیجه حتما وقتی نیاز به اعمال فیلتر دارید از همین روش استفاده کنید یعنی :

Where You Can Filter Left

 

 

امیدوارم از این مقاله لذت برده باشید و همچنین برای شما کارآمد و مورد استفاده باشد و ممنون از اینکه وقت گذاشتین و مقاله من رو مطالعه کردین.

منتظر مقالات بعدی باشید :)) …

 

منابع :

– کتاب های Learn Windows PowerShell in a Month و PowerShell in depth

– کتاب PowerShellNotesForProfessionals

– Administration and Automation with Windows PowerShell از UDEMY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.