איך להשתמש בכלים לולאה For, While ואחרים ב-PowerShell

במאמר זה, נבחן לולאות PowerShell – For loops, While loops, Do-While loops, ו- Do-Until loops. אני אסביר כיצד לולאות PowerShell מורכבות וכיצד להגדיר תנאים להיכנס ללולאה או לצאת ממנה.

PowerShell For loop

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

PowerShell For Loop

התחביר ללולאת For הוא כדלקמן:

for (<Init>; <Condition>; <Repeat>) {

<Script Block>

}
  • גוש ה- <Init> מבצע פקודה או סט של פקודות לפני תחילת הלולאה. כללית, זהו המקום בו אתה מאתחל את משתנה המניה.
  • בחלק ה- <Condition>, אתה מעריך את המבחן התנאי. אם זה true, אתה נכנס ללולאה ומבצע את הפקודות בגוף התסריט. אז, התנאי מוערך שוב עד שהוא מתרז ל- false.
  • המציין ה- <Repeat> מבצע פקודה אחת או יותר, מופרדים בפסיקים בכל איטרציה של הלולאה. כללית, זה משמש לשנות את משתנה המניה.

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

הגנת נתונים

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

Learn More

for ($var = 1; $var -le 5; $var++) {

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
A PowerShell loop repeating the same operation five times

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

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

for ($var = 6; $var -le 5; $var++) {

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
If the initial condition if false, the loop won’t be executed

לפי הצורך, תוכל להשתמש באופרטורים לוגיים לציון תנאים נוספים. במקרה זה, הוספנו תנאים מרובים. כיוון שהאופרטור הלוגי -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.
We added another condition to stop the script when the variable reaches a false state.

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

עם זאת, יש לנו גם משתנה שני, $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.
Two different variables are being updated 

איך להגדיר תנאי לולאה בפוושל

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

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

באפשרותך להשתמש באופרטורי השוואה כדי להשוות ערכים מספריים:

Operation Result
2 -eq 2 True
2 -eq 5 False
3 -gt 7 True
5 -lt 3 False

בנוסף, באפשרותך להשוות ערכי מחרוזות עם אופרטורי השוואה:

הגנת נתונים

דע מהו המידע הרגיש שמאוחסן באיפה, ערך את הסיכון המשויך אליו, ויישם מדיניות הגנת נתונים המבוססת על מדיניות עם DataSecurity Plus, תוכנת הגנת נתונים של ManageEngine. התחל היום עם גרסה מלאה, ניסיון חינמית למשך 30 יום.

Learn More

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
We ran a PowerShell ForEach loop with a collection of five items.

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

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

foreach ($service in (Get-Service | Select-Object -First 5)) {

Write-Host Service name is: $service.name and status is $service.status

}
This script shows the first five services working on our computer

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

לולאת While ב-PowerShell

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

Diagram showing how a PowerShell While loop works

התחביר של לולאת while הוא הבא:

while (<Condition>){<Script Block>}

לדוגמה, אם יש לך משתנה בשם var עם ערך התחלתי של 1 ואתה רוצה לחזור על הלולאה חמישה פעמים, הלולאה צריכה להיראות כך:

הגנת נתונים

דע אילו נתונים רגישים מאוחסנים איפה, ערך את הסיכון הקשור אליהם, והחל מדיניות הגנת נתונים באמצעות DataSecurity Plus, תוכנת הגנת נתונים של ManageEngine. התחל היום עם גרסה מרובת פונקציות ללא תשלום ל-30 יום.

Learn More

$var = 1

while ($var -le 5)

{

Write-Host The value of Var is: $var

$var++

}

Write-Host End of While loop.
Example of a loop running five times

בדוגמה לעיל, המשתנה מאותחל מחוץ ללולאה ומתווסף בבלוק הסקריפט. הפקודה 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.
The result of the loop if the initial condition is false

ניתן להשתמש בתנאים מורכבים יותר באמצעות אופרטורים לוגיים. לדוגמה, אם תרצו שהמשתנה יהיה קטן מ-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.
Running the loop with a variable we want to be less than 5 and not equal to 3

כפי שצוין מראש, בשימוש באופרטור הלוגי -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.

Diagram showing how a PowerShell Do-While loop works

התחביר ללולאת 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.
Running a 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.
The script was still executed even though the initial condition was false.

שוב, שימוש באופרטורים לוגיים אפשרי. אם נשתמש באותה דוגמה כמו לפני, תראו כי הלולאה עוצרת כאשר כרכב המשתנה הוא 3 מכיוון שרצינו שהמשתנה יהיה קטן מ-5 ולא שווה ל-3:

הגנת נתונים

גלו אילו נתונים רגישים מאוחסנים בכל מקום, ערכו את הסיכון הקשור אליו, ויישמו אמצעי הגנת נתונים המבוססים על מדיניות עם DataSecurity Plus, תוכנת הגנת נתונים של ManageEngine. התחילו היום עם גרסת ניסיון ל-30 יום, בחינם ומלאת פונקציות.‏

Learn More

$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.
The script stops because we wanted our variable to be less than 5 and not equal to 3

לולאת Do-Until של PowerShell

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

Diagram showing how a PowerShell Do-Until loop works

התחביר של לולאת 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.
The Do-Until loop is not triggered as it needs an initial false result

כשבדיקת התנאי מעריכה ל־נכון, לולאת 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.
Changing the logical operator to ‘greater than’ provides us a false result for the first iterations of the 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.
We use the -or operator to have the Do-Until loop repeat until our variable is greater than 5 or equal to 3

איך לשלוט בלולאות PowerShell

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

הצהרת ה-break

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

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

הגנת נתונים

גלו אילו נתונים רגישים מאוחסנים באילו מקומות, העריכו את הסיכון הקשור אליהם ויישמו אמצעים להגנת נתונים בהתאמה אישית תוך שימוש ב- DataSecurity Plus, תוכנת ההגנת נתונים של ManageEngine. התחילו היום עם גרסת ניסוי חינמית ל-30 יום בפועל.

Learn More

כדי להשיג זאת, ההצהרת 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.
We’ve used a break statement instead of using logical operators to stop the script

כאשר ערך המונה זהה ל-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.
The if statement is triggered when the value of the variable is equal to 3

כמו שיתכן ששמת לב, כאשר ערך המשתנה שווה ל־3, נפעל התנאי if, מבצע את ההמשך ודולג על יתרת הקוד בתוך הלולאה מבלי לשבור אותה.

מסקנה

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

מאמר קשור:

Source:
https://petri.com/how-to-use-powershell-for-while-loops/