شما می توانید پارامترها را به دو روش مختلف به یک اسکریپت PowerShell ارسال کنید. (اگر در مورد PowerShell اطلاعاتی ندارید، لطفاً به نکته "مقدمه ای به PowerShell" مراجعه کنید.) پارامترها را می توان بر اساس موقعیت یا نام منتقل کرد. هر دو به یک اندازه معتبر هستند، بنابراین بیایید نحوه انجام هر کدام را بررسی کنیم.
من یک اسکریپت PowerShell به نام LookForFiles.ps1 دارم. به دنبال فایلهایی در یک دایرکتوری معین میگردد و فایلهایی را نمایش میدهد که اندازه آنها بیش از 20K است. در حال حاضر فیلمنامه من به این صورت است:
$files = Get-ChildItem C:Temp foreach ($file in $files) { if ($file.length -gt 20000) { Write-Output $file } }
همانطور که می بینید، نام دایرکتوری من (C:Temp) و اندازه ای که باید بررسی شود (20000) هر دو دارای کد سخت هستند. در عوض، میخواهم نام و اندازه فهرست را وارد کنم تا اسکریپت من انعطافپذیرتر شود.
ابتدا چیزها را طوری تغییر میدهم که این پارامترها را بر اساس موقعیت پاس میکنم، یعنی پارامتر اول دایرکتوری و پارامتر دوم اندازه باشد. اسکریپت جدید من به این شکل است:
$files = Get-ChildItem args[0] foreach ($file in $files) { if ($file.length -gt args[1]) { Write-Output $file } }
اکنون اسکریپت خود را فراخوانی می کنم و خروجی را مشاهده می کنم: (شکل 1 را ببینید.)
شکل 1. عبور پارامترهای موقعیتی.
توجه داشته باشید که وقتی اسکریپت را فراخوانی می کنم، دو پارامتر را ارسال می کنم، یعنی "C:Temp" و "20000". اینها به ترتیب در "$args[0]" و "$args[1]" پر می شوند تا اسکریپت دقیقاً مانند قبل اجرا شود. حالا بیایید اسکریپت را طوری تغییر دهیم که انتظار پارامترهای نامگذاری شده را داشته باشد:
param([string] $dir = "C:Temp", [int32] $size = 20000) $files = Get-ChildItem $dir foreach ($file in $files) { if ($file.length -gt $size) { Write-Output $file } }
توجه داشته باشید که من ارجاع به متغیرهای "$args" را حذف کردم. همچنین توجه داشته باشید که خط اول (امتداد به خط دوم) یک عبارت "param" است. این به PowerShell می گوید که انتظار پارامترهای نامگذاری شده را داشته باشد. این عبارت "param" باید اولین خط در اسکریپت شما باشد. دو متغیر را تعریف می کند و آنها را به مقادیر پیش فرض مقداردهی اولیه می کند. متغیر رشته $dir را تعریف می کند و آن را به طور پیش فرض "C:Temp" و متغیر int32 (عددی) $size را تعریف می کند و آن را به صورت پیش فرض 20000 می کند. اسکریپت فراخوانی می شود، همچنان اجرا می شود و از آن مقادیر استفاده می کند.
به جای جایی که قبلاً $args[0] داشتم، اکنون متغیر $dir و به جای جایی که قبلاً $args[1] داشتم، اکنون متغیر $size را دارم. بیایید اسکریپت را فراخوانی کنیم و این پارامترهای نامگذاری شده را مشخص کنیم: (شکل 2 را ببینید.)
شکل 2. عبور پارامترهای نامگذاری شده.
اکنون هنگامی که اسکریپت فراخوانی می شود، "-dir" و سپس دایرکتوری مورد علاقه خود را مشخص می کنم، و "-size" را برای نشان دادن اندازه مورد علاقه من مشخص می کنم. از آنجایی که این پارامترها نامگذاری شده اند، می توانم ترتیب آنها را تغییر دهم. که ابتدا "-size" و در مرحله دوم "-dir" مشخص شده است. یا می توانم آنها را به طور کامل حذف کنم و از مقادیر داخل اسکریپت استفاده شود.