معلمات خط أنابيب PowerShell: كيفية إنشاء وظائف جاهزة للأنابيب

قد استكشفت كيفية عمل أنبوب الأوامر في باورشيل وكيفية تمرير البيانات من 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/