قد استكشفت كيفية عمل أنبوب الأوامر في باورشيل وكيفية تمرير البيانات من cmdlets المدمجة إلى الأخرى. ولكن هل كنت تعلم أنه يمكنك إنشاء وظائف مخصصة خاصة بك تستخدم أيضًا الأنبوب؟ نعم! باستخدام ربط المعلمة، يمكن لوظائفك العمل تمامًا مثل cmdlets المدمجة، وقبول البيانات بسلاسة من الأنبوب.
سوف يرشدك هذا البرنامج التعليمي إلى تجهيز وظائفك المخصصة بقوة الأنبوب، محولًا كيفية أتمتة وهيكلة سكربتات باورشيل الخاصة بك.
بدلاً من الاعتماد على حلقات التكرار أو الإدخالات اليدوية، فكّر في مستويات جديدة من الكفاءة والمرونة في سكربتاتك!
تمكين إدخال الأنبوب باستخدام ValueFromPipeline
لكي تستقبل وظيفتك معلومات من الأنبوب، يجب عليك تهيئة واحدة أو أكثر من المعلمات لقبولها. ستهيئ المعلمات لاستخدام السمة ValueFromPipeline
أو ValueFromPipelineByPropertyName
.
لنبدأ بإعداد وظيفة تقوم بتثبيت برنامج على عدة أجهزة كمبيوتر لتمرير مصفوفة من أسماء الأجهزة إليها دون استخدام حلقة تكرار.
أضف السمة ValueFromPipeline
إلى المعلمة ComputerName
، مما يسمح بمعاملة كل كائن قادم من الأنبوب على أنه معلمة ComputerName
.
سيقوم باورشيل بربط كل كائن قادم من الأنبوب بـ $ComputerName
بهذا الإعداد.
function Install-Software { param( [Parameter(Mandatory)] [ValidateSet(1,2)] [int]$Version, [Parameter(Mandatory, ValueFromPipeline)] [string]$ComputerName ) process { Write-Host "I installed software version $Version on $ComputerName. Yippee!" } }
الآن، قم بتمرير مصفوفة من أسماء الأجهزة إلى الوظيفة باستخدام الأنبوب.
$computers = @("SRV1", "SRV2", "SRV3") $computers | Install-Software -Version 1
بدون كتلة process
، ستقوم الدالة بمعالجة العنصر الأخير فقط. تتيح كتلة process
للدالة معالجة كل عنصر في المصفوفة بشكل مستقل.
الربط حسب اسم الخاصية باستخدام ValueFromPipelineByPropertyName
ربما لديك خصائص متعددة في كائنات الأنابيب الخاصة بك تحتاج إلى مطابقتها مع معلمات دالتك. إذا كان الأمر كذلك، دعنا نفترض أن ملف CSV يحتوي على حقلي ComputerName
و Version
.
لإظهار الربط حسب اسم الخاصية، ابدأ بحفظ ملف CSV يحتوي على هذه الخصائص:
@( [pscustomobject]@{'ComputerName' = 'SRV1'; 'Version' = 1} [pscustomobject]@{'ComputerName' = 'SRV2'; 'Version' = 2} [pscustomobject]@{'ComputerName' = 'SRV3'; 'Version' = 2} ) | Export-Csv -Path C:\Scripts\software_installs.csv -NoTypeInformation
قم بتحديث الدالة لقبول Version
و ComputerName
حسب اسم الخاصية.
مع ValueFromPipelineByPropertyName
، تقوم الدالة بمطابقة الخصائص في كل كائن (مثل تلك المستوردة من ملف CSV) مع المعلمات في الدالة.
function Install-Software { param( [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [ValidateSet(1,2)] [int]$Version, [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [string]$ComputerName ) process { Write-Host "I installed software version $Version on $ComputerName. Yippee!" } }
الآن، استخدم Import-Csv
لاستيراد الملف وقم بتمرير كل كائن إلى Install-Software
.
Import-Csv -Path C:\Scripts\software_installs.csv | Install-Software
تربط حقول ComputerName
و Version
لكل صف بالمعلمات المقابلة في الدالة. يتيح هذا النهج معالجة سهلة لتثبيت البرمجيات بكميات كبيرة عبر أجهزة الكمبيوتر المتعددة مع التحكم في الإصدار.
الختام
في هذا البرنامج التعليمي، تعلمت كيفية تمكين دعم الأنابيب في وظائف PowerShell، مما يجعلها أكثر مرونة وقوة. يمكنك الآن تصميم وظائف مخصصة تقبل البيانات بسلاسة من الأنابيب، على غرار الأوامر المدمجة.
مع وظائف تمكين الأنابيب، تحصل على تحكم أدق في إدخال البيانات، مما يبسط تصميم النصوص البرمجية ويحسن قراءتها.
أثناء استمرارك في العمل مع PowerShell، افكر في دمج هذه التقنيات لكتابة وظائف فعالة وجاهزة للاستخدام مع الأنابيب. جعل النصوص الخاصة بك أكثر قابلية للتكيف وفعالية في أتمتة المهام!
Source:
https://adamtheautomator.com/powershell-pipeline-parameters/