פרמטרים של צנרת PowerShell: כיצד ליצור פונקציות מוכנות לצנרת

אולי חקרתם כיצד פועל צינור ה-PowerShell וכיצד cmdlets המובנים מעבירים נתונים מפקודה אחת לאחרת. אבל ידעתם שאתם יכולים ליצור פונקציות מותאמות אישית שמשתמשות גם בצינור? כן! עם קישור פרמטרים, הפונקציות שלכם יכולות לפעול בדיוק כמו cmdlets המובנים, מקבלות נתונים מהצינור בצורה חלקה.

מדריך זה ינחה אתכם בציוד הפונקציות המותאמות אישית שלכם בכוח הצינור, מה שtransform איך אתם מאוטומטים ומבנים את הסקריפטים שלכם ב-PowerShell.

במקום להסתמך על לולאות או קלט ידני, שחררו רמות חדשות של יעילות וגמישות בסקריפטים שלכם!

הפעלת קלט צינור עם ValueFromPipeline

כדי שהפונקציה שלכם תקבל מידע מהצינור, עליכם להגדיר פרמטר אחד או יותר שיקבלו אותו. תגדירו פרמטרים שישתמשו במאפיין ValueFromPipeline או ValueFromPipelineByPropertyName.

בואו נתחיל בהגדרת פונקציה שמתקינה תוכנה על מספר מחשבים כדי להעביר לה מערך של שמות מחשבים מבלי להשתמש בלולאה.

הוסיפו את מאפיין ValueFromPipeline לפרמטר ComputerName, מה שמאפשר לכל אובייקט נכנס מהצינור להתייחס כאל פרמטר ComputerName.

PowerShell יקשר כל אובייקט נכנס מהצינור ל$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, מה שהופך אותן לגמישות וחזקות יותר. עכשיו תוכל לעצב פונקציות מותאמות אישית שמקבלות נתונים באופן שוטף מהצינור, בדומה לפקודות cmdlet מובנות.

עם פונקציות המאפשרות צינור, תרוויח שליטה יותר על קלט הנתונים, מפשט עיצוב סקריפט ומשפר קריאות.

כשתמשיך לעבוד עם PowerShell, שקול לשלב טכניקות אלה כדי לכתוב פונקציות יעילות המוכנות לצינור. הפוך את הסקריפטים שלך לנגישים ויעילים יותר באוטומציה של משימות!

Source:
https://adamtheautomator.com/powershell-pipeline-parameters/