כתיבת פלט ב־PowerShell: המלווה הידידותי שלך לפלט

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

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

מוכן? קרא הלאה וגלה את קסם פקודת ה-Write-Output!

דרישות מקדימות

מדריך זה יהיה הדגמה מעשית. כדי לעקוב, וודא שיש לך מחשב עם PowerShell מותקן (מומלץ לגרסה האחרונה). המדריך משתמש ב-Windows 10 עם PowerShell 7 מותקן.

פלט עצמים לקונסולה

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

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

הרץ את הפקודה הבאה כדי להוציא הודעת Hello, World! לקונסולה.

Write-Output "Hello, World!”

מטה, ניתן לראות את הפונקציה הבסיסית ביותר של ה־Write-Output cmdlet. אך קרא הלאה כדי ללמוד עוד על שימוש בינוני ומתקדם של פקודה זו.<>

Outputting objects to the console

העברת אובייקטים לפקודה אחרת

בנוסף להצגת הפלט בקונסולה, ניתן להשתמש בפקודת Write-Output כדי לשלוח את האובייקט לפקודה אחרת לעיבוד נוסף. איך? על ידי שימוש באופרטור הצינור (|). Pipelining הופך את Write-Output לפקודה מועילה וגמישה למשימות אוטומציה וניהול מערכת.

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

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

  • משיג רשימה של כל התהליכים (Get-Process) הרצים במערכת שלך.
  • הוצא את הרשימה לצינור, שאז מועברת לפקודת Sort-Object. מפעיל הפילטר מאפשר לך לקשר מספר פקודות יחד ולעבד את הפלט של פקודה אחת כקלט לפקודה אחרת.
  • מיין את רשימת התהליכים (Sort-Object) לפי שימוש ה-CPU שלהם בסדר יורד.
$processes = Get-Process
Write-Output $processes | Sort-Object CPU -Descending

שים לב שאתה יכול לשים כל אחת מהפקודות במדריך זה בתסריט של PowerShell ולהריץ אותו.

הרשימה הממוינת מוצגת במסוף, כפי שמוצג למטה.

Passing objects to another command

הוצאת עצמים עם פורמט מותאם

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

כדי להוציא עצם עם פורמט מותאם, פקודת Format-Custom יחד עם פקודת Write-Output יעשו את העבודה, כך:

כדי ליצור את פורמט הפלט המותאם, ולאחר מכן להעביר את פלט פקודת Format-Custom ל-Write-Output.<>

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

$object = [pscustomobject]@{
Property1 = "Value1"
Property2 = "Value2"
Property3 = "Value3"
}

כעת, הריצו את הפקודה הבאה כדי לבצע את הפעולות הבאות:

  • צרו פורמט מותאם אישית (Format-Table) עבור הפלט (Write-Output) של הטבלה האשראייתית שלכם ($object). המאפיינים Property1, Property2 ו־ Property3 מוגדרים כעמודות.
  • כווננו את רוחבי העמודות (-AutoSize) כך שיתאימו לתוכן.
$object | Format-Table -Property Property1, Property2, Property3 -AutoSize | Write-Output
Creating a custom format for an object output

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

$object | Format-List -Property Property1, Property2, Property3 | Write-Output
Outputting the object as a list of property-value pairs

עברת עצם אוסף כייחודי

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

כדי לראות איך הפרמטר -NoEnumerate פועל, עקבו אחרי השלבים הבאים:

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

  • הגדירו מערך של $numbers מאחד עד שלוש (1,2,3).
  • ספור את מספר האובייקטים (Measure-Object) שעברו דרך הצינור.
  • Write-Output $numbers | Measure-Object

בלעדיו משתמש הפקודה NoEnumerate, Measure-Object מחזיר ספירה של שלוש (3), מכיוון שכל איבר במערך $numbers נספר ונשלח בנפרד דרך הצינור.

# מכיל מערך
$numbers = 1,2,3
# מחזיר את מספר האובייקטים שעברו דרך הצינור
Write-Output $numbers | Measure-Object
Outputting an array object measurement

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

אך מכיוון שהוספת את הפרמטר -NoEnumerate, פקודת Measure-Object טוטלת על האובייקט כייחיד, ומחזירה ספירה של אחד (1).

# מכיל מערך
$numbers = 1,2,3
# מחזיר את מספר האובייקטים כייחיד יחיד דרך הצינור
Write-Output -NoEnumerate $numbers | Measure-Object
Outputting object count as a single entity

הכלאת הפקודה Write-Output בסוגריים (כלומר, (Write-Output 1,2,3)) תכריע על תהליך המספור לפי תחום הפרמטר -NoEnumerate.

יצירת מערכת תפריט ותחנות קלט

שימוש נהדר נוסף של פקודת Write-Output הוא יצירת מערכת תפריט בעזרת סקריפט PowerShell שמבקש מהמשתמש קלט.

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

הקוד למטה משתמש בלולאה כדי לבקש באופן רציף מהמשתמש לבחור אפשרות מתוך רשימת אפשרויות עד שהמשתמש בוחר באפשרות יציאה.

# אתחול משתנה $exit ל-$false
$exit = $false

# התחל לולאה שתרוץ עד שהמשתמש בוחר באפשרות "יציאה"
while (!$exit) {

  # הצג רשימת אפשרויות למשתמש
  Write-Output "Please select from the following options:"
  Write-Output "1. Option 1"
  Write-Output "2. Option 2"
  Write-Output "3. Option 3"
  Write-Output "4. Exit"

  # בקש מהמשתמש לבחור
  $selection = Read-Host

  # השתמש בהוראת switch לבצע קודים שונים בהתאם לבחירת המשתמש
  switch ($selection) {
    1 {
      # אם המשתמש בוחר אפשרות 1, הצג הודעה ובצע משהו עבור האפשרות 1
      Write-Output "You selected Option 1."
      # בצע משהו עבור אפשרות 1
    }
    2 {
      # אם המשתמש בוחר אפשרות 2, הצג הודעה ובצע משהו עבור האפשרות 2
      Write-Output "You selected Option 2."
      # בצע משהו עבור אפשרות 2
    }
    3 {
      # אם המשתמש בוחר אפשרות 3, הצג הודעה ובצע משהו עבור האפשרות 3
      Write-Output "You selected Option 3."
      # בצע משהו עבור אפשרות 3
    }
    4 {
      # אם המשתמש בוחר אפשרות 4, הגדר את $exit ל-$true כדי לצאת מהלולאה
      $exit = $true
    }
  }
}

עכשיו, הרץ את התסריט (myoutput.ps1) מתיקיית העבודה.

./myoutput.ps1

כפי שמוצג למטה, הודעת ההודעה המשוייכת לבחירה שלך מוצגת כאשר אתה בוחר באפשרויות 1, 2, או 3. אך כאשר אתה בוחר באפשרות 4, התסריט מסיים.

Creating a menu system and input prompts

Displaying a Splash Screen or Welcome Message

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

החליפו את הקוד בקובץ myoutput.ps1 באחד הבא, שמציג מסך רקע (באנר של הודעת ברכה) כאשר אתה מפעיל את הסקריפט שלך.

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

# ניקוי המסך
Clear-Host

# הצגת מסך רקע באמצעות Write-Output
Write-Output "##############################################"
Write-Output "#                                            #"
Write-Output "#   Welcome to the SuperScript 3000!         #"
Write-Output "#                                            #"
Write-Output "##############################################"

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

./myoutput.ps1
Displaying a splash screen or welcome message

הצגת סרגל ההתקדמות

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

פתחו את קובץ myoutput.ps1 שלכם, והוסיפו את הקוד שלמטה לתחתית הקוד הקיים בקובץ הסקריפט.

הקוד שלמטה משתמש בלולאת while לעבור דרך מספר צעדים. בדוגמה זו, 100 צעדים. כל איטרציה של הלולאה מחשבת את האחוז של הצעדים שהושלמו ומציגה סרגל התקדמות באמצעות Write-Output.

הסרגל התקדמות נוצר באמצעות שילוב של האופרטורים הבאים:

  • * – משכפל מחרוזת מסוימת מספר פעמים
  • $() – מאפשר לפלט של ביטוי להיות כלול בתוך מחרוזת.

הסקריפט משהה אז (Start-Sleep) למשך 1 שניות כדי לדמות התקדמות לפני המעבר לשלב הבא.

# הגדר את מספר השלבים הכולל לסרגל ההתקדמות
$steps = 100

# אתחל את המונה עבור השלב הנוכחי
$currentStep = 0

# התחל לולאה שתרוץ עבור מספר השלבים
while ($currentStep -lt $steps) {
  # הגדל את מונה השלב הנוכחי
  $currentStep++

  # חשב את האחוז של השלבים שהושלמו
  $percentComplete = [int] ($currentStep / $steps * 100)

  # הצג סרגל התקדמות באמצעות Write-Output
  Write-Output "Progress: [$("=" * $percentComplete)$(" " * ($steps-$percentComplete))] $percentComplete% complete"

  # השהה למשך 1 שניות כדי לדמות את ההתקדמות
  Start-Sleep -Seconds 1
}

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

./myoutput.ps1

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

Displaying a progress bar

מסקנה

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

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

עם הידע החדש שזכית, למה לא לכתוב את הפלטים שלך לסוגי קבצים שונים, כמו קבצי .txt ו-.xml? ללא קשר למטרה, העתקות של פלט משמשות לנו בפתרון בעיות עם המערכת או יישומים. פקודת ה-Write-Output וה-Out-File מעניקות לך כוח שלא הכרת שצריך לך.

Source:
https://adamtheautomator.com/powershell-write-output/