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

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

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

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

הגדרת פונקציית הכתיבה הבסיסית Write-Log

נתחיל עם פונקציה בסיסית המקבלת פרמטר קלט יחיד עבור הודעת הלוג ומוסיפה אותה לקובץ לוג סטנדרטי עם חותמת זמן.

בדוגמה זו:

  • הפרמטר $LogMessage מסומן כחובה, לכן PowerShell מעורף אותו אם אינך מספק ערך.
  • כל רשומת לוג כוללת חותמת זמן בפורמט HH:mm:ss.
function Write-Log {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$LogMessage
    )
    $timeGenerated = Get-Date -Format HH:mm:ss
    Add-Content -Path "C:\Scripts\software_installer.log" -Value "$timeGenerated - $LogMessage"
}

בדיקת פונקציית הכתיבה Write-Log

כעת שלפונקציית Write-Log יש מבנה בסיסי והיא מקבלת פרמטרים, הגיע הזמן לבדוק את פונקציונליותה. הבדיקה עוזרת לוודא שכל צד של הפונקציה, מהגדרות ברירת המחדל ועד קלטים מותאמים, פועל כצפוי ומתמודד עם שגיאות באופן יעיל.

בדוק את פונקציית Write-Log על ידי קריאה אליה עם הודעה מותאמת:

Write-Log -LogMessage 'Testing a new log message'

הפקודה הזו מוסיפה רשומה חדשה עם חותמת זמן לקובץ הלוג (C:\Scripts\software_installer.log).

מספר נקודות לשים לב להן בפונקציית Write-Log:

Standardized Information Logging By setting a default path for the log file, you don’t have to specify the file name every time you call the function. This standardizes all log information to a single file, keeping your logs organized.
תהליך הלוגים המשופר הפונקציה מסתירה פרטים כגון קבלת התאריך והשעה הנוכחיים עם Get-Date והוספת תוכן עם Add-Content. כמשתמש בפונקציה, תוכל להתמקד בכתיבת הודעות לקובץ הלוג מבלי לזכור את הפרטים הללו.
קריאות קוד משופרת הפונקציה מקבלת בבירור הודעות לקובץ לוג מיועד, מה שהופך את המטרה להיות לוגינג במקום פשוט כתיבה לקובץ טקסט כללי. זה מבהיר את הקוד ועוזר להבין במבט אחד.

עם השיפורים הללו, פונקציית Write-Log עוזרת לך לקלוט את משימות הלוגינג, ובכך ניתן לשפר את ניקיון הסקריפטים ואת ניתוחיותם.

תוכל לצפות בהודעת הלוג האחרונה על ידי בדיקת תוכן קובץ הלוג:

Get-Content -Path "C:\Scripts\software_installer.log"

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

אך אולי בטעות קראת ל־Write-Log בלעדי פרמטר LogMessage:

Write-Log

תגיש לב שכיוון וכיוון ש־LogMessage הוא חובה, PowerShell ימנע מהפונקציה לרוץ. אבל, אם LogMessage לא היה חובה, הייתה נכתבת הודעה ריקה, יוצרת ערך "אופס" בלתי רצוי.

וודא את התוצאה על ידי בדיקה מחודשת של קובץ הלוג:

Get-Content -Path "C:\Scripts\software_installer.log"

הוספת גמישות עם נתיב קובץ לוג מותאם

בעוד שהפונקציה פועלת מצוין, בואו נעשה אותה גמישה יותר על ידי הוספת פרמטר $LogFilePath. פרמטר זה מאפשר לך לציין נתיב קובץ מותאם אישית תוך מתן נתיב ברירת מחדל.

function Write-Log {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$LogMessage,

        [Parameter()]
        [string]$LogFilePath = 'C:\Scripts\software_installer.log'
    )
    $timeGenerated = Get-Date -Format HH:mm:ss
    Add-Content -Path $LogFilePath -Value "$timeGenerated - $LogMessage"
}

שימו לב ש$LogFilePath יש נתיב ברירת מחדל של C:\Scripts\software_installer.log, אך אתה יכול לספק כל נתיב חוקי.

כדי לציין נתיב קובץ שונה, קרא לWrite-Log כך:

Write-Log -LogMessage 'Custom path log message' -LogFilePath 'C:\Scripts\custom_log.log'

אכיפת נתיב הקובץ עם ValidateScript

אתה לא רוצה שהפונקציה שלך תקליט קבצים שלא קיימים. לכן, תוכל לוודא שהקובץ קיים לפני ההקלטה על ידי שימוש במאפיין הפרמטר ValidateScript. מאפיין זה מאפשר לך להריץ קוד נגד ערך הפרמטר, verifying אותו לפני הרצת הפונקציה.

function Write-Log {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$LogMessage,

        [Parameter()]
        [ValidateScript({ Test-Path -Path $_ })]
        [string]$LogFilePath = 'C:\Scripts\software_installer.log'
    )
    $timeGenerated = Get-Date -Format HH:mm:ss
    Add-Content -Path $LogFilePath -Value "$timeGenerated - $LogMessage"
}

עם ValidateScript, Write-Log בודק שהנתיב לקובץ שסיפקת קיים. אם הקובץ לא קיים, PowerShell עוצר ומחזיר שגיאה.

אתה יכול ליצור קובץ ריק לפני קריאתו כדי לוודא שהפונקציה פועלת כפי שצפוי:

Set-Content -Path 'C:\Scripts\softwarex_installer.log' -Value ''
Write-Log -LogMessage 'Log entry in a new file' -LogFilePath 'C:\Scripts\softwarex_installer.log'

בדיקת פונקציית Write-Log ופונקציות האימות

לאחר הוספת גמישויות לפונקציה שלך, זה טבעי לבדוק אם היא פועלת כפי שהתכוונת. אתה חייב לוודא פונקציית הקלטה חזקה על ידי בדיקת מאפיין ValidateScript ולראות כיצד הוא משפר את פונקציית Write-Log שלך.

בואו נראה כיצד ValidateScript פועל על ידי ניסיון להקליט לקובץ שאינו קיים:

Write-Log -LogMessage 'Finishing install...' -LogFilePath 'C:\Scripts\softwarex_installer.log'

במקרה זה, האטריבוט ValidateScript בודק אם הנתיב שצוין לקובץ הלוג קיים על ידי קריאה לTest-Path. אם הנתיב אינו קיים, הפונקציה מחזירה שגיאה.

הפונקציה נכשלת מכיוון שC:\Scripts\softwarex_installer.log אינו קיים. אתם יכולים לאמת זאת על ידי הרצת Test-Path ידנית:

Test-Path 'C:\Scripts\softwarex_installer.log'

מכיוון שTest-Path מחזירה $false, הקובץ אכן חסר.

כדי לתקן זאת, צרו קובץ לוג ריק ובדקו שוב.

Set-Content -Path 'C:\Scripts\softwarex_installer.log' -Value ''
Write-Log -LogMessage 'Finishing install...' -LogFilePath 'C:\Scripts\softwarex_installer.log'

עכשיו, הפונקציה פועלת כפי שצפוי.

אשרו את התוצאה על ידי צפייה בקובץ הלוג:

Get-Content -Path 'C:\Scripts\softwarex_installer.log'

השימוש בValidateScript ובאטריבוטים אחרים לאימות פרמטרים מחייב את השימוש הנכון בפרמטרי הפונקציה, מפחית שגיאות ומקנה לפונקציות PowerShell שלכם אמינות רבה יותר.

מסקנה

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

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

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

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