פוורשל הוא שפת תסריטים עוצמתית שמספקת המון יכולות לאוטומציה וניהול מערכות הפעלה במערכות הפעלה באמצעות חלונות. אחת מהבניות הנפוצות ביותר היא לולאת while
של פוורשל.
אל תדאג אם תתעקש בלולאה אינסופית בניסיון ללמוד תסריטים של פוורשל. הנהלת הלולאת while
של פוורשל תדריך אותך ליציאה הגדולה שלך. ובמדריך זה, תקפוץ חזרה ליסודות העבודה עם לולאות while
בפוורשל בעודך כותב את התסריטים שלך.
המשך לקרוא כדי לשפר את כישורי התסריט שלך בפוורשל לרמה הבאה!
דרישות מוקדמות
מדריך זה יהיה דגמון מעשי. כדי לעקוב אחרי, הקפד לו יש:
- A Windows machine – This tutorial uses Windows 10.
- התקנת PowerShell 5.0 או גרסה גבוהה יותר – מדריך זה משתמש בפוורשל 7.
- A user account with administrator privileges.
ביצועי לולאת while
עם תנאי יחיד
אחת מסוגי הלולאות הפשוטות ביותר היא הסוג עם תנאי יחיד. בניגוד להצהרת If
, סוג זה של לולאה מבצעת קבוצה של פקודות נתונות כל עוד תנאי מסוים מתקיים. כאשר מתקבל 'שקר', הלולאה נשברת והביצוע ממשיך עם שאר התסריט.
למטה התחברות התחברות לתנאי יחיד while
:
- הדבר הראשון שתגלה הוא השימוש בסוגריים. התנאי חייב להיות מוקף בסוגריים, בעוד הבלוק של הקוד הוא סט של פקודות PowerShell שמבצעות בזמן שהתנאי הוא נכון.
- הדבר השני לשים לב אליו הוא שהתנאי חייב להחזיר ערך בוליאני, שמעריך לאמת או לשקר.
הריצו את הקוד למטה, כאשר ערך המשתנה $val
מתחיל ב־0
ומתווסף ב־1
בכל פעם שבלוק הקוד רץ עד שערך המשתנה $val
שווה ל־3
.
כאשר $val
מגיע לערך של 3
, שמפעיל את התנאי לשקר, הלולאה נשברת והרצה ממשיכה עם שאר הסקריפט.

ביצוע לולאת While של PowerShell עם משתנים מובנים ($true
/$false
)
הדוגמה הקודמת, שמשתמשת בתנאים בלולאת while
, עובדת טוב. אך תוכל גם להשתמש במשתנים המובנים של PowerShell, כמו $true
ו־$false
, כדי ליצור לולאת While
.
התחביר למטה מבצע עד ש־$true
כבר אינו $true
. כלומר, הלולאה רצה לעד. אך תמיד עליך לכלול דרך לצאת מלולאה אין סופית. אחרת, אתה תישאר תקוע לעד. תלמד עוד על כיצד לצאת מלולאה באמצעות break
ו־continue
מאוחר יותר במדריך זה.
הפעל את בלוק הקוד למטה, שרץ לעד, ומדפיס את ערך $i
לקונסולה.
כעת, לחץ על Ctrl+C כדי לצאת מהלולאה. הלולאה הזו צורכת הרבה משאבי מערכת, אז היה זהיר בשימוש בהם.

while
loop with PowerShell’s built-in ($true
) variableביצוע לולאות מרובות תנאים While
בנוסף ללולאות while
עם תנאי יחיד, ניתן גם ליצור לולאות while
עם תנאים מרובים. כמו בלולאת while
עם תנאי יחיד, התנאים חייבים להחזיר ערך בוליאני, אמת או שקר.
להלן התחביר ללולאת while
עם תנאים מרובים, דומה לתחביר של לולאת while
עם תנאי יחיד. ההבדל העיקרי הוא שניתן לכלול תנאים מרובים המופרדים על ידי האופרטורים הבאים:
- AND (
-and
) – שני התנאים חייבים להיות אמת. - OR (
-or
) (אחד התנאים יכול להיות אמת).
הריצו את הקוד למטה, המשך ללולאת while
כל עוד $val
אינו שווה (-ne
) ל־3
וגם $i
אינו שווה (-ne
) ל־5
.
כאשר ערכי המשתנים מתקבלים ככל התנאים הרלוונטיים, הלולאה מפסיקה והרצת הסקריפט ממשיכה.

ביצוע לולאת while
עם אופרטור AND

while
loop with AND operatorעכשיו, בצע את הקוד הבא, ששואל את המשתמש לגיל שלו, המאוחסן במשתנה $age
.
אם המשתמש מזין מספר הקטן מ- (-lt
) 1
או שאינו מספר (-nomatch
), המשתמש מתבקש שוב להזין מספר תקין. ההתנהגות הזו שימושית כאשר מוענים נותנים למשתמשים מספר סיכויים להזין קלט תקין.
בפלט למטה, ניתן לראות שהמשתמש הוזם להזין את גילו שלוש פעמים, כך:
- את הפעם הראשונה, המשתמש הזין עשר, שאינו מספר.
- הפעם השנייה, המשתמש הזין 0, שהוא מתחת ל-1.
- הפעם השלישית, המשתמש הזין 10, שהוא גיל חוקי.

while
loop with the OR operatorשימוש במילות BREAK ו-CONTINUE בלולאות While
ראית כיצד לולאות while
מוסיפות גמישות לסקריפט שלך ב-PowerShell. אך כדי לשלוט בביצוע של לולאות While שלך, הוסף את מילות המפסיק break
ו-continue
.
לדוגמה, אם תרצה לעבד רק מספר מסוים של פריטים במערך, תוכל להשתמש במילת המפסיק BREAK כדי לצאת מהלולאה כאשר המספר הרצוי של פריטים עובר עיבוד.
המילים המפסיקות פועלות כך:
Keyword | Function |
---|---|
break | Immediately exits the loop and continues execution with the rest of the script. |
continue | Skips over the remaining code block in the current iteration of the loop and continues with the next iteration. |
בצע את הקוד למטה, המסתובב דרך מערך של 10 פריטים.
בקוד למטה, ההצהרה if
בודקת את הערך של $i
. אם ערך $i
הוא 5
, מילת המפסיק CONTINUE דולגת על הקוד היתר בלולאה וממשיכה עם האיטרציה הבאה. אם ערך $i
הוא 8
, מילת המפסיק BREAK יוצאת מהלולאה וממשיכה עם שאר הסקריפט.
אחרת, לולאת ה-while
מדפיסה (Write-Host
) ומגדילה את ערך המשתנה $i
ב-1
.
כפי שניתן לראות בפלט למטה, הלולאה דילגה על הפריט החמישי והשמיני במערך. הלולאת while
עיבדה את כל הפריטים האחרים במערך ויצאה לאחר שהגיעה לפריט השמיני.

while
loop with break
and continue
keywordsהגבלת זמן הרצת לולאת While
בדרך כלל, תרצה להגביל את הזמן שבו הלולאה רצה. אולי אתה מנסה להתחבר לשרת מרוחק. אם כן, תוכל לתת לשרת זמן להגיב לפני שהלולאה תפסיק לרוץ באמצעות הפקודה Start-Sleep
בתוך הלולאת שלך while
.
הַפְקוּדָה Start-Sleep
מְשׁוֹהֶה אֶת בִּיצוּת הַתַּסְרֵט לְמַשָּׁךְ זְמַן מְסוּוּי.
הָרְץ אֶת הַקוֹד לְהַשְׁגָּת וּשְׁמִירָה שֶׁל הַתָּאִיך וְהַזְמַן הַנוֹכָּחִי בַּמִּשְׁתָּנֶה $startTime
. הָלוֹךְ הַלּוֹךְ while
מַפְעִיל כַּל עוֹד הַתָּאִיך/הַזְמַן הַנוֹכָּחִי פָּחוּת מִ־10
שְׁנִיוֹת מֵאֵצֶל הֶעָרָך הַמּוּזָכָּר בַּמִּשְׁתָּנֶה $startTime
.
כְּתוֹךְ הַפְּעִילָה שֶׁל הַלּוֹךְ while
, מַדפִּיס הוֹדָעָה בְּזְמַן שֶׁהַפְקוּדָה Start-Sleep
מְשׁוֹהֶה אֶת בִּיצוּת הַתַּסְרֵט לְמַשָּׁךְ 1
שְׁנִיָה.
בְּלוֹק הַקוֹד לְמַטָּה הוּא רַק תַּבְנִית לְמַה שֶׁתַּשְׁתֵּמֵשׁ בַּפְּרָקְטִיקָה. תוּכַל לָשׂוּם עוֹד דְבָרִים בַּקוֹד בְּתוֹךְ הַלּוֹךְ כְּכַפִּירָה.
למטה, ניתן לראות שהלולאה המשיכה לרוץ למשך 10 שניות לפני שהיא יוצאת מהלולאה.

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