מאמר זה עודכן לשנת 2023!
סקריפטים יכולים לקבוע החלטות. איך? על ידי שימוש במושג הנקרא לוגיקת תנאי. הפקודה if של PowerShell ובניית התנאי if/else הם הדרכים הנפוצות להגדרת תנאים.
כאשר אתה כותב סקריפטים של PowerShell, אתה עושה זאת עם משימה ספציפית או משימות בראש. אך, פעולה יכולה להיות בעלת מספר פעולות אפשריות בהתבסס על תנאי אחד או יותר. המצב הזה הוא בו בא לידי ביטוי הבניית התנאי של PowerShell.
במאמר זה, תלמד את בניית התנאי If-Else של PowerShell ותבין את התחביר שלו ואיך הוא פועל. תלמד גם כמה דרכים שבהן אפשר להשתמש בפקודה If של PowerShell כדי להוסיף טיפול בלוגיקת תנאים בסקריפטים שלך מהדוגמאות.
הבנת תחביר התנאי של PowerShell
בניית התנאי if-else של PowerShell מעריכה אחת או יותר של ביטויים תנאי. למטה תראה את תחביר הפקודה if. סגנון זה נקרא לעיתים קרובות שליטת זרימה.
כפי שאתה יכול לראות מהתחביר למעלה, כל בדיקה מוקפת בסוגריים ()
. בדיקות יכולות להשתמש באופרטורים שונים, כגון אופרטורים להשוואה ו־אופרטורים לוגיים,
רשימות הפקודות מכילות את הקוד המיועד להרץ אם תוצאת הבדיקה מעריכה לtrue.
אז, יש שלושה הצהרות אפשריות בקבוצת הצהרת If. אלה הם ההצהרה IF, ELSEIF, ו ELSE.
- ההצהרה
if
מכילה את הבדיקה הראשונה לשיקול, לאחריה מגיעה רשימת ההצהרות הראשונית המקוננת בתוך סוגריים מסולסלים{}
.ההצהרה if ב-PowerShell היא ההצהרה היחידה שחובה להופיע. - ההצהרה
elseif
היא המקום בו אתה מוסיף תנאים. אתה יכול להוסיף מספר ElseIf הצהרות כאשר יש לך מספר תנאים. PowerShell יבצע בדיקה של כל אחת מהתנאים הללו לפי סדר. - ההצהרה
else
אינה מקבלת תנאי. רשימת ההצהרות בהצהרה זו מכילה את הקוד להפעלה אם כל התנאים הקודמים נבדקו והתבררו כשקרים.
הבנת הזרימה הלוגית של הצהרת If של PowerShell
כדי להבין יותר טוב איך עובדת ההצהרה If-Else של PowerShell, כדאי להכיר את זרימת הלוגיקה שלה. התרשים למטה ממחיש את זרימת הבסיס של ההצהרה If-Else של PowerShell.

כאשר ההצהרה if רצה, PowerShell עוברת דרך כל תנאי ומבצעת בדיקה אם הקוד מחזיר אמת או שקר. סיכום של התנהגות ההצהרה היא:
- PowerShell מבצעת בדיקה של התנאי ב- בדיקה 1.
- אם תוצאת בדיקה 1 מחזירה אמת, הקוד בתוך רשימת ההצהרות של ה-if ירוץ, ואז PowerShell ייצא מההצהרה If.
- אם תוצאת בדיקה 1 מחזירה שקר, PowerShell ממשיכה לבדוק את התנאי (בדיקה n) בהצהרת ElseIf הבאה.
- אם תוצאת מבחן n מחזירה שקר, PowerShell ממשיך לבדוק את התנאי (מבחן n) בהצהרת ElseIf הבאה, אם קיימת הצהרת ElseIf נוספת -או-
- אם תוצאת מבחן n מחזירה שקר, הקוד בהצהרת Else יתבצע, ו-PowerShell יצא מההצהרה If -או-
- אם תוצאת מבחן n מחזירה נכון, הקוד בהצהרת ElseIf יתבצע, ו-PowerShell יצא מההצהרה If.
שימוש בהצהרת If-Else ב-PowerShell
הקטעים הבאים הם דוגמאות של איך ההצהרה If ב-PowerShell משמשת בכתיבת סקריפטים. הטכניקות שתלמד יכולים להדריך אותך בשימוש בהצהרת If במקרים ממשיים שמחייבים את השימוש בה.
תנאי יחיד If-Else
נתחיל עם הדבר הכי בסיסי, ההצהרה היחידה של PowerShell If. עליך להשתמש בהצהרת if יחידה כאשר יש רק תנאי אחד לבדיקה.
הדוגמה למטה בודקת האם ערך המשתנה $num
גדול מ-10. אם התוצאה היא נכונה, התוצאה שאומרת "$num הוא גדול מ-10"
תוצג על המסך. אם התוצאה היא שקר, PowerShell לא יעשה כלום מאחר ויש רק תנאי אחד לבדיקה.
אם אתה בודק רק ערך ספציפי, כמו
if ($Value) { }
, PowerShell יבדוק אם ה-$Value
אינו$Null
,0
,$False
, מחרוזת ריקה או מערך ריק.
הדבקת הקוד למערכת הפעלה PowerShell תספק לך את התוצאה הבאה:

עכשיו, תוכל להוסיף את ההוראה Else אם ברצונך להוסיף פעולת "גיבוי" ברירת מחדל במקום לא לתת ל-PowerShell לעשות כלום כשתוצאת הבדיקה שקרה.
בדוגמה שלמטה, הקוד בהוראת Else ירוץ אם ערך המשתנה $num
אינו גדול מ-10.
הרצת הקוד המשונה ב-PowerShell תן לך את הפלט המוצג למטה.

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

בדיקת $Null בהוראת If של PowerShell
עשוי להיחשב ככל היית מניח שבדיקת תנאי לתנאי $Null היא ישירה. אך, הצד שבו מניחים את ערך ה- $Null חשוב מאוד מאחר והתוצאה לא בהכרח תהיה זהה בכל תנאי. כדאי לנהוג להשתמש תמיד בתנאי $Null בצד שמאל כך.
אם תניח את הבדיקה למשתנה $Null בצד ימין, והערך בצד שמאל הוא רשימה, כמו מערך למשל, אז $Null יתנהג כפילטר. כפי שניתן לראות מהדוגמה למטה, אם נכניס את $Null בצד שמאל, נקבל תוצאות בוליאניות עקביות.
$List = @(1,2,2,3,4)
$List -NE $Null
$List -EQ $Null
$Null -NE $Null
$Null -EQ $Null

תנאי If-Else מרובים עם ElseIf
כאשר אתה מעריך תנאים מרובים, עליך להוסיף פקודות ElseIf אחת או יותר. כל פקודת ElseIf מכילה את ביטוי הבדיקה שלה ואת הקוד שלה להרצה.
התסריט למטה, כאשר מופעל, ימשיך לדרוש שם פריות עד ללחיצת מקש CTRL+C
, או עד שהמשתמש מזין את האות "X".
לאחר מכן, פקודת הIf תעבור דרך כל תנאי בסדר עד שתמצא התאמה. אם הקלט לא התאים לאחד מהתנאים, הקוד בתוך ההצהרה Else יורץ.
למטה מוצג דמויות של התנהגות התסריט לעיל בזמן הרצתו ב-PowerShell.

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

כפי שניתן לראות, הפלט למעלה מציג את אות הדיסק, ערכי המקום הפנוי, ותכונות נוספות. במובן כללי הפלט למעלה הוא בסדר, אך הוא אינו אינטואיטיבי. דרך ההצגה של המידע לא מציינת האם המקום בדיסק נמצא במצב קריטי, אזהרה או רגיל.
שימוש בהצהרת If של PowerShell כדי לשפר את הקוד
A more intuitive output can be achieved using the PowerShell If-Else statement by adding conditions to check if the free space is over or below certain thresholds. And these thresholds will define the status of the free disk space.
התסריט לדוגמה למטה מבצע את הפעולות הבאות:
- על ידי ערך המשתנה
$Critical
, מגדיר את הסף לו ייהיו ציונים של אחוז המקום הפנוי החופפים כ- קריטי. - שימוש בערך של המשתנה
$Warning
, הגדר את הסף שבו יותוו באחוז המקום החופשי כ-אזהרה. - קבל את כל מידע דיסק קבוע מהמחשב המקומי
- עבור בכל מידע הדיסק כדי לקבוע את המקום החופשי ולתייג את מעמדו.
- אם אחוז המקום החופשי גבוה מערך המשתנה
$Warning
, מציין את מעמד המקום בתגית רגיל. - אם אחוז המקום החופשי גבוה מערך המשתנה
$Critical
, מציין את מעמד המקום בתגית אזהרה. - אם אחוז המקום החופשי נמוך או שווה לערך המשתנה
$Critical
, מציין את מעמד המקום בתגית קריטי.
- אם אחוז המקום החופשי גבוה מערך המשתנה
- מיקם את תכונות העצם
'אות הדיסק'
,'שם הדיסק'
,'המקום הכולל (GB)'
,'המקום החופשי (GB)'
,'אחוז המקום החופשי (%)'
, ו-'סטטוס'
. - החזר את הדו"ח הסופי.
העתק את הקוד למטה ושמור את הסקריפט בשם הקובץ Get-DiskSpace.ps1
. אל תשכח לשנות את ערכי המשתנים $Critical
ו-$Warning
כדי לבדוק עם סף שונה.
באפשרותך גם להקצות את תוצאת התנאי if/else למשתנה, לדוג'
$Status = if ($percentFree -gt $Warning) { 'Normal' }
כדי ליצור תנאי קצר יותר אולי.
לאחר שהסקריפט נשמר, נסה אותו על ידי קריאה לשמו ב-PowerShell. להלן הדגמה של איך הסקריפט פועל.

כפי שניתן לראות מהפלט, ה-מצב של כל דיסק נקבע על ידי אחוז המקום החופשי בדיסק, שהוא תוצאה של שימוש בתנאים מרובים עם If-Else ב-PowerShell.
תנאים מרובים ומקוננים
תניחו שיש לך הצהרת if-else עם תנאי שמוגדר בבלוק ה-else
. כאשר ההצהרה if-else רצה, בלוק ה-else
נקרא אם הקוד בתוך בלוק ה-if
מחזיר שקר.
בתוך בלוק ה-else
, עליך לבצע בדיקה תנאית נוספת. כתוצאה, נדרשת הצהרת If-Else נוספת. סצנריו זה נקרא If-Else מקוננים. ההצהרה if-else מקוננת בדרך כלל משמשת אם ה-If-Else הפנימי תלוי בתוצאת הפעולה ב-If-Else החיצוני.
שימוש בהצהרות If-Else מרובות ומקוננות יכול להיות מבלבל למדי. הנקודה המרכזית היא לזכור את מיקום המסגרת ולוודא שאתה מזמין את הקוד שלך. המיקום של הקוד שלך יעזור לך לזהות ולהפריד בקלות את ההצהרות ה-If-Else שלך.
דוגמה להצהרות If-Else מרובות/מקוננות
התסריט הדוגמא שלהלן מראה כיצד ההצהרות If-Else מרובות ומקוננות יכולות להיות תלויות זו בזו. הלוגיקה של הקוד למטה היא כדלקמן.
- אם
$SendEmail
הוא$false
, התסריט לא יעשה כלום ויצא. - אם
$SendEmail
הוא$true
, אז המשתנים$From
ו-$To
חייבים לא להיות ריקים או null. אחרת, המשתנה$abortFlag
יוגדר ל-1. - אם
$SendEmail
הוא$true
ו-$CCEnabled
הוא$true
, אז המשתנה$CC
חייב להיות לא ריק או null. אחרת, המשתנה$abortFlag
יוגדר ל-1. - אם המשתנה
$SendEmail
הוא$true
והמשתנה$BCCEnabled
הוא$true
, אז המשתנה$BCC
לא יכול להיות ריק או null. אחרת, המשתנה$abortFlag
יוגדר ל־1. - אם ערך המשתנה
$abortFlag
הוא 1, הסקריפט יסיים בנקודה זו ולא ימשיך. - אם ערך המשתנה
$abortFlag
הוא 0, הסקריפט ימשיך עד לסיום.
העתק את הקוד למטה ושמור אותו כ־Send-MyMail.ps1
. אל תשנה את ערכי המשתנים כרגע.
לאחר ששמרת את הקובץ, הרץ אותו ב־PowerShell, כפי שמוצג למטה. הדגמה מציגה את תוצאת הסקריפט כאשר ערכי המשתנים נשארים ללא שינוי.

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

עכשיו, שנה את המשתנים ונסה שילובים כדי לבדוק כיצד ה־If-Else המקונן יישפיע. שינוי ובדיקה על ידי עצמך יעזור לך להבין את הלוגיקה יותר היטב.
סיכום
במאמר זה, למדת על בניית הלוגיקה התנאית – בניית הפקודה If של PowerShell. ההצהרה If-Else מאפשרת לכותבי סקריפטים לפורמט חישובי הלוגיקה ולנתב את פעולות הסקריפטים שלהם על סמך תוצאות הבדיקה.
עם הדוגמאות במאמר זה, אתה צריך ללמוד את הדרכים והטכניקות לשימוש בהצהרת If-Else בעת יצירת קוד המופעל על פי החלטות. ההצהרה If-Else יכולה להיות פשוטה בשימוש בתנאי יחיד ומתקדמת יותר בעומק כאשר אתה מסתכל עמוק יותר לתוך ההצהרות If-Else המקוננות.
מה דעתך על ההצהרה If-Else? האם אתה חושב שתשתמש בה יותר ויותר לאחר קריאת המאמר הזה? אילו מטרות נוספות ניתן לשקול עבורן אפשר להחיל את הידע שצברת כאן?