במאמר זה, נבחן לולאות PowerShell – For loops, While loops, Do-While loops, ו- Do-Until loops. אני אסביר כיצד לולאות PowerShell מורכבות וכיצד להגדיר תנאים להיכנס ללולאה או לצאת ממנה.
PowerShell For loop
ה- לולאת For היא לולאת מנוע, ונהוג להשתמש בה כאשר נדרש לחזור על משימה מסוימת מספר פעמים, לעבד אוסף, או לציין פריטים לפי מספר אינדקס. היא מחזירה כל עוד תנאי הבדיקה מעריך true ויוצאת כאשר תנאי זה שוקל ל- false.

התחביר ללולאת For הוא כדלקמן:
for (<Init>; <Condition>; <Repeat>) { <Script Block> }
- גוש ה- <Init> מבצע פקודה או סט של פקודות לפני תחילת הלולאה. כללית, זהו המקום בו אתה מאתחל את משתנה המניה.
- בחלק ה- <Condition>, אתה מעריך את המבחן התנאי. אם זה true, אתה נכנס ללולאה ומבצע את הפקודות בגוף התסריט. אז, התנאי מוערך שוב עד שהוא מתרז ל- false.
- המציין ה- <Repeat> מבצע פקודה אחת או יותר, מופרדים בפסיקים בכל איטרציה של הלולאה. כללית, זה משמש לשנות את משתנה המניה.
אם ברצונך לחזור על פעולה מסוימת חמישה פעמים, השתמש בדוגמה הבאה:
דע אילו נתונים רגישים נשמרים איפה, ערך את הסיכון הקשור אליהם, ויישם אמצעי הגנת נתונים מבוסס מדיניות עם DataSecurity Plus, תוכנת הגנת נתונים של ManageEngine. התחל היום עם גרסת ניסיון חינמית למשך 30 יום בעלת פונקציונליות מלאה.
for ($var = 1; $var -le 5; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

כאן, המשתנה מאתחל עם ערך של 1, שהוא קטן מ-5, לכן אתה נכנס ללולאה ומבצע את קטע הסקריפט. בכל איטרציה, הערך של המשתנה מתווסף ב-1 ומוערך נגד התנאי עד שהתוצאה היא שקר.
כאשר התנאי מוערך בתחילה, אם התוצאה היא שקר, קטע הפקודות לא יוצג:
for ($var = 6; $var -le 5; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

לפי הצורך, תוכל להשתמש באופרטורים לוגיים לציון תנאים נוספים. במקרה זה, הוספנו תנאים מרובים. כיוון שהאופרטור הלוגי -and נותן תוצאה של אמת רק כאשר שני התנאים הם אמת, הלולאה עוצרת כאשר ביטוי ה- $var -ne 3 מגיע למצב שקר.
for ($var = 1; $var -le 5 -and $var -ne 3; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

כפי שצוין למעלה, תוכל לבצע פקודה אחת או יותר במקומות
עם זאת, יש לנו גם משתנה שני, $var2. הוא מתחיל עם ערך התחלתי של 5, שמתוחזר אך אינו מוערך כחלק מהתנאי.
for (($var1 = 1), ($var2 = 5); $var1 -le 5; ($var1++), ($var2--)) { Write-Host The value of Var1 is: $var1 Write-Host The value of Var2 is: $var2 } Write-Host End of for loop.

איך להגדיר תנאי לולאה בפוושל
בפוושל, פקודות מבוצעות בצורה רצופה. אך לפעמים, עשוי להיות צורך לחזור על פקודה אחת או על סט של פקודות עד שתנאי מסוים יתקיים. זה נקרא לולאה.
כדי להגדיר מהן התנאים להיכנס או לצאת מלולאה בפוושל, עליך להשתמש ב־אופרטורי השוואה. כאלה יאפשרו לך להשוות ערכים או למצוא ערך התואם תבנית מסוימת. התוצאה היא ערך בוליאני (אמת או שקר), אשר יתמודד על ידי הלוגיקה של הלולאה.
באפשרותך להשתמש באופרטורי השוואה כדי להשוות ערכים מספריים:
Operation | Result |
2 -eq 2 | True |
2 -eq 5 | False |
3 -gt 7 | True |
5 -lt 3 | False |
בנוסף, באפשרותך להשוות ערכי מחרוזות עם אופרטורי השוואה:
דע מהו המידע הרגיש שמאוחסן באיפה, ערך את הסיכון המשויך אליו, ויישם מדיניות הגנת נתונים המבוססת על מדיניות עם DataSecurity Plus, תוכנת הגנת נתונים של ManageEngine. התחל היום עם גרסה מלאה, ניסיון חינמית למשך 30 יום.
Operation | Result |
‘PowerShell’ -eq ‘powershell’ | True |
‘PowerShell’ -eq ‘cmd’ | False |
‘PowerShell’ -like ‘power*’ | True |
‘PowerShell’ -notlike ‘*shell’ | False |
לולאת ForEach בפוושל
הלולאת foreach משמשת לעבור על פריטים באוסף. במקרה זה, אין תנאי לבדיקה, אלא הלולאה נשגרת עד שכל הפריטים באוסף יעברו עיבוד.
<Figure Foreach_Diagram.png> The syntax for a Foreach loop is the following: foreach ($<item> in $<collection) { <Script Block> }
כאן, אנו מתחילים עם ההצהרה foreach, לאחריה מסוגלים בסוגריים עם משתנה ואוסף לעבר עליו. באיזור הקוד האחרון, בלוק הסקריפט יושן.
שוב, על מנת להריץ את הלולאה חמישה פעמים, עליך לצריך אוסף עם חמישה פריטים. במקרה זה, אלו יהיו הערכים השלמים מ-1 עד 5:
$collection = 1..5 foreach ($item in $collection) { Write-Host The value of Item is: $item } Write-Host End of foreach loop

המשתנה מאתחל עם ערך הראשון באוסף, שהוא 1, לאחר מכן בלוק הסקריפט יושן. באיטרציה הבאה, המשתנה מקבל את הפריט הבא במערך, שהוא 2. בלוק הסקריפט יעובר עיבוד שוב ושוב עד שכל הפריטים באוסף יעברו עיבוד.
לדוגמה, אם תרצה לעבוד עם השירותים הארבעה הראשונים שעובדים על המחשב שלך, הלולאה שלך תיראה כך:
foreach ($service in (Get-Service | Select-Object -First 5)) { Write-Host Service name is: $service.name and status is $service.status }

עליך להבין כי ישנה הבדל בין הלולאת foreach לבין הפקודה Foreach-Object. נוח לבלבל ביניהם. הלולאת foreach תמיד מתחילה עם הצהרה foreach, בעוד שהפקודה Foreach-Object תמשיך פקודה עם צינור כאשר היא מעבדת את האובייקטים שנשלחים אליה.
לולאת While ב-PowerShell
ההצהרה While ב-PowerShell משמשת ליצירת לולאה שמפעילה פקודה או סט של פקודות אם התנאי מעריך ל-true. היא בודקת את התנאי לפני ביצוע בלוק סקריפט. כל עוד התנאי הוא true, PowerShell תבצע את בלוק הסקריפט עד שהתנאי יחזור false.

התחביר של לולאת while הוא הבא:
while (<Condition>){<Script Block>}
לדוגמה, אם יש לך משתנה בשם var עם ערך התחלתי של 1 ואתה רוצה לחזור על הלולאה חמישה פעמים, הלולאה צריכה להיראות כך:
דע אילו נתונים רגישים מאוחסנים איפה, ערך את הסיכון הקשור אליהם, והחל מדיניות הגנת נתונים באמצעות DataSecurity Plus, תוכנת הגנת נתונים של ManageEngine. התחל היום עם גרסה מרובת פונקציות ללא תשלום ל-30 יום.
$var = 1 while ($var -le 5) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

בדוגמה לעיל, המשתנה מאותחל מחוץ ללולאה ומתווסף בבלוק הסקריפט. הפקודה Write-Host משמשת להדפסת ערך המשתנה בכל סיור של הלולאה.
חשוב לציין כי אם התנאי המתחילי הוא false, אז הלולאה לא תופעל. בדוגמה שלנו, אם הייתה לנו ערך של המשתנה (var = 6), אז פקודת הלולאה לא הייתה עובדת כלל ולבלוק התסריט לא הייתה נעשית חל.
$var = 6 while ($var -le 5) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

ניתן להשתמש בתנאים מורכבים יותר באמצעות אופרטורים לוגיים. לדוגמה, אם תרצו שהמשתנה יהיה קטן מ-5 ולא שווה ל-3, הלולאה תיראה כך:
$var = 1 while ($var -le 5 -and $var -ne 3) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

כפי שצוין מראש, בשימוש באופרטור הלוגי -and, התוצאה היא true רק כאשר שני המבחנים התנאי מעריכים להיות true. במקרה זה, כאשר המשתנה מוקצה בערך של 3, התנאי השני מתבצע כ- false: מה שמוביל לתוצאת false, עוצרת את הלולאה.
לולאת PowerShell Do-While
A Do-While loop is a variant of the While loop, and the main difference is that the script block is executed before the condition is checked. This means that even if the start condition is false, the script block will be executed at least once.

התחביר ללולאת Do-While הוא הבא:
do { <script block> } while (<condition>)
אז, אם נשתמש בדוגמה כמו לפני, הקוד יראה כך:
$var = 1 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5) Write-Host End of Do-While loop.

נפעיל לולאת Do-While עם ערך למשתנה var = 6. כאן, הלולאה עדיין תתבצע פעם אחת לפני שמנסים לבדוק אם התנאי היה false.
$var = 6 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5) Write-Host End of Do-While loop.

שוב, שימוש באופרטורים לוגיים אפשרי. אם נשתמש באותה דוגמה כמו לפני, תראו כי הלולאה עוצרת כאשר כרכב המשתנה הוא 3 מכיוון שרצינו שהמשתנה יהיה קטן מ-5 ולא שווה ל-3:
גלו אילו נתונים רגישים מאוחסנים בכל מקום, ערכו את הסיכון הקשור אליו, ויישמו אמצעי הגנת נתונים המבוססים על מדיניות עם DataSecurity Plus, תוכנת הגנת נתונים של ManageEngine. התחילו היום עם גרסת ניסיון ל-30 יום, בחינם ומלאת פונקציות.
$var = 1 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5 -and $var -ne 3) Write-Host End of Do-While loop.

לולאת Do-Until של PowerShell
ה־לולאת Do-Until עובדת באותו אופן כמו לולאת Do-While: היא מפעילה את בלוק התסריט תחילה ואז מעריכה את התנאי. ההבדל כאן הוא שבעוד לולאת Do-While נכנסת ללולאה עם תנאי נכון, לולאת Do-Until מחפשת תנאי שגוי כדי להיכנס ללולאה.

התחביר של לולאת Do-Until הוא הבא:
do { <script block> } until (<condition>)
כפי שתראו, המבנה נראה כמעט זהה ללולאת Do-While. אך בואו נראה מה יהיה התוצאה אם נמשיך להשתמש בדוגמה הקודמת שלנו:
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -le 5) Write-Host End of Do-Until loop.

כשבדיקת התנאי מעריכה ל־נכון, לולאת Do-Until לא מופעלת מכיוון שאנו צריכים תוצאה שגויה כדי להיכנס ללולאה. במקרה זה, אם תרצו לחזור על הלולאה 5 פעמים, יהיה על יישופן של אופרטורים לוגיים להשתנות ל־גדול מ- (-gt), שיספק תוצאה שגויה לפעמים הראשונות 5:
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -gt 5) Write-Host End of Do-Until loop.

שוב, מכיוון שאנו צריכים שהתנאי הראשוני יהיה שגוי כדי להיכנס ולהישאר בלולאה, זה ישפיע גם על אופרטורים לוגיים אם נצטרך להגדיר ביטוי מורכב יותר.
בדוגמה הבאה, עלינו להשתמש באופרטור -or כדי שהלולאה תחזור עד שהמשתנה שלנו גדול מ-5 (התוצאה השקרית הנדרשת) או שווה ל-3. לא יכולנו להשתמש באופרטור -and, שהיה דורש מהמשתנה להיות גדול מ-5 ושווה ל-3 באותו זמן מאחר שזה היה מוביל ללולאה אין סופית.
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -gt 5 -or $var -eq 3) Write-Host End of Do-Until loop.

איך לשלוט בלולאות PowerShell
ניתן לשלוט בזרימת הביצוע בלולאה באמצעות מילות מפתח ליציאה מהלולאה בלי לבדוק את התנאי או לדלג על האיטרציה הנוכחית של הלולאה. בעוד שהמילים המפתחות האלה יכולות להיות שימושיות לפעמים, לא תמיד מומלץ להשתמש בהן מאחר שהן עשויות להקשות על קריאת הסקריפט.
הצהרת ה-break
הצהרת ה-break עוצרת ויוצאת מהלולאה הנוכחית מיידית בלי לבצע את שאר קטע הקוד בבלוק הסקריפט של הלולאה, ובלי לבדוק את התנאי המסוים. זה מאפשר ל-PowerShell להמשיך לבצע את שאר קטעי הקוד.
המילת המפתח break מתנהגת באותו אופן ללא קשר לסוג הלולאה שנמצאת בשימוש. באמצעות אחד הדוגמאות מלמעלה, נספור מ-1 עד 5 וניצא מהלולאה אם המשתנה לספירה שווה לשלוש. אך הפעם, נוסיף break במקום להשתמש באופרטורים לוגיים בתנאי הבדיקה.
גלו אילו נתונים רגישים מאוחסנים באילו מקומות, העריכו את הסיכון הקשור אליהם ויישמו אמצעים להגנת נתונים בהתאמה אישית תוך שימוש ב- DataSecurity Plus, תוכנת ההגנת נתונים של ManageEngine. התחילו היום עם גרסת ניסוי חינמית ל-30 יום בפועל.
כדי להשיג זאת, ההצהרת if תשמש להגדרת קריטריוני יציאה.
For ($var = 1; $var -le 5; $var++) { if ($var -eq 3) {break} Write-Host The value of Var is: $var } Write-Host End of for loop.

כאשר ערך המונה זהה ל-3, נפעל את התנאי if וה-break יופעל. בגלל שהמילת break מוצבת לפני פקודת ה-Write-Host בלוק הסקריפט, האחרון לא יעובד. הלולאה מפסיקה והסקריפט ממשיך לבצע את שאר הקוד.
תנאי המשך
המילת-המפתח continue מאפשרת לכם לדלג על חלקו הנותר של הקוד, ולחזור לתחילת הלולאה מבלי לצאת ממנה.
כמו בדוגמה הקודמת, יש להשתמש בלולאת For, אך הפעם במקום לצאת מהלולאה כאשר המשתנה הולך עד 3, PowerShell ידלג על הקוד הנותר לסיבוב הנוכחי וימשיך עם הלולאה עד שהבדיקה התנאי היא שקר.
for ($var = 1; $var -le 5; $var++) { if ($var -eq 3) {Continue} Write-Host The value of Var is: $var } Write-Host End of for loop.

כמו שיתכן ששמת לב, כאשר ערך המשתנה שווה ל־3, נפעל התנאי if, מבצע את ההמשך ודולג על יתרת הקוד בתוך הלולאה מבלי לשבור אותה.
מסקנה
PowerShell תומך בסוגים שונים של לולאות, וחשוב ביותר להבין כיצד הן יכולות לעזור לך לפשט את הסקריפטים שלך ולחזור על פעולות מסוימות בדרך עקבית. כבר כיסינו טיפים וטריקים שונים ב־PowerShell באופן מרחיק על Petri, לכן ודאי תבדוק את מדריכינו האחרים על איך לכתוב סקריפטים בפווארשל ואיך להשתמש ב־אפשרות ForEach בצורה מקבילית.
מאמר קשור:
Source:
https://petri.com/how-to-use-powershell-for-while-loops/