לולאת PowerShell: מדריך מקיף

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

במאמר זה, תלמד מהו השימוש של לולאת for ב־PowerShell, תבין את התחביר שלה ומה מרכיב את הצהרת הלולאה for. תלמד גם מהדוגמאות על ידי דרכים שונות להשתמש ב־for loop.

הבנת הצהרת הלולאה for ב־PowerShell ומציינים מקום

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

שימוש בלולאה for מעניק שליטה יותר על המגבלות והתנאים שבהם הקוד צריך לסיים. זה נשווה ללולאת foreach או לפקודת ForEach-Object, שבה הסיבוב מפסיק לאחר שעבר הפריט האחרון באוסף.

להלן התחביר של ההצהרה על לולאת for לעזרתך.

for (<Initial iterator value>; <Condition>; <Code to repeat>)
{
    <Statement list>
}

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

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

הבנת זרימת ההרצה של לולאת PowerShell For

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

שלב 1

בתחילת ההצהרה על לולאת for, הערך התחלתי נקרא ונשמר בזכרון.

דוגמה: $num = 0

שלב 2

ההצהרה של לולאת ה־for מעריכה את תוצאת הביטוי בתוך התיבה ה־Condition. אם התוצאה היא $false, הלולאה של for מופסקת. אם התוצאה היא $true, אז לולאת ה־for ממשיכה לשלב הבא.

דוגמה: $num -lt 10

שלב 3

PowerShell מריץ את הקוד בתוך התיבה Statement list. יכול להיות שם פקודה אחת או יותר, בלוקי סקריפט או פונקציות.

דוגמה: "אני מספר $num "

שלב 4

בשלב זה, הביטוי בתיבת ה־Repeat מורץ, שיעדכן את הערך הנוכחי של התיבה Initial. לאחר מכן, הזרימה תחזור לשלב 2.

דוגמה: $num++

שימוש בלולאת For ב־PowerShell (דוגמאות)

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

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

קבלת רצף של מספרים

הקוד למטה מציג את המחרוזת "אני מספר $num" באופן חוזר בקונסולה החל מ־1 עד שערך $num מגיע ל־10.

for ($num = 1 ; $num -le 10 ; $num++){    "I count $num"}

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

For loop example to display numbers less than 10

חיבור מחרוזות

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

הדוגמה למטה תמשיך לחזור על האות "x" עם כל שורה מכילה תו נוסף מאשר הקודמת עד שמספר התווים בשורה מגיע ל-30.

כפי שניתן לראות, ערך המשתנה $x הוגדר עם '' שמכיל אפס תווים. המגבלה על פי התנאי היא עד שמספר התווים בערך של $x מגיע ל-30. לאחר כל איטרציה, תו "x" נוסף נצמד לערך של $x.

for ($x='' ;$x.length -le 30;$x=$x+'x'){
    Write-Host $x
    Start-Sleep -Milliseconds 20
}

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

String concatenation example using For Loop

חיבור מחרוזות עם ערכי התחלה וחזרה מרובים

מיקומי ההתחלה והחזרה בפקודת לולאת for יכולים לקבל יותר מביטוי אחד.

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

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

שים לב שמיקומי ההתחלה והחזרה כעת מכילים שני ביטויים. כל ביטוי מוקף בסוגריים ומופרד בפסיק.

$colors = @("Green","Cyan","Red","Magenta","Yellow","White")
for (($x=''),($fgcolor = $colors | Get-Random) ;$x.length -le 30;($x=$x+'x'),($fgcolor = $colors | Get-Random)){
    Write-Host $x -ForegroundColor $fgcolor
    Start-Sleep -Milliseconds 20
}

לאחר הרצת הקוד המשונה ב-PowerShell, התוצאה הצפויה מוצגת למטה.

String concatenation example using For Loop

הצגת התקדמות

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

הקוד לדוגמה למטה מראה לך את הדרך הבסיסית להצגת ההתקדמות מ-1 עד 100%. כפי שתראה, הערך ההתחלתי של ה-$counter הוא 1, והתנאי מציין שלולאה זו תרוץ עד שערך ה-$counter יגיע ל-100.

for ($counter = 1; $counter -le 100; $counter++ )
{
		# ADD YOUR CODE HERE
    Write-Progress -Activity "Update Progress" -Status "$counter% Complete:" -PercentComplete $counter;
}

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

Progress counter driven by for loop

הצגת טיימר ספירה לאחור

הקוד הבא מראה איך להשתמש בלולאת for להצגת טיימר ספירה לאחור. טיימר הספירה לאחור מציג רק את השניות הנותרות, החל מ-10.

אם ברצונך לשנות את מספר ההתחלה, אתה רק צריך לשנות את ערך המשתנה $seconds במקום ה-Initial.

for ($seconds=10; $seconds -gt -1; $seconds--) {
    Write-Host -NoNewLine ("`rseconds remaining: " + ("{0:d4}" -f $seconds))
    Start-Sleep -Seconds 1
}

הרצת הקוד לעיל ב-PowerShell תוביל לפלט לדוגמה למטה.

A countdown timer that is driven by for loop

הצגת טיימר ספירה לאחור (לולאת For מקוננת)

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

הקוד לדוגמה למטה מכיל שתי הצהרות לולאה for.

הלולאה הראשונה טופלת את הספירה לאחור של חלק הדקה של השעון. כפי שאתה רואה, ישנה משתנה $דקות לפני הלולאה for שבו יש לציין את מספר הדקות ממנו יתבצע הספירה לאחור.

הלולאה השנייה טופלת את הספירה לאחור של חלק השנייה של השעון. לאחר כל תור, הלולאה עושה הפסקה של 1 שנייה לפני שהיא ממשיכה. זה ימשיך כך עד שערך ה$שניות יגיע ל-0.

# הגדר את מספר הדקות לספירה לאחור
$minutes = 1

for ($minutes--; $minutes -gt -1; $minutes--)
{
    for ($seconds = 59 ; $seconds -gt -1 ; $seconds--)
    {
        $remaining = ("{0}:{1}" -f ("{0:d4}" -f $minutes),("{0:d2}" -f $seconds))
        Write-Host "`r$remaining" -NoNewline
        Start-Sleep -Seconds 1
    }
}

כאשר הקוד למעלה מופעל, כך ייראה מונה השעון לאחור.

A Countdown timer using nested for loop

קביעת מספר ראשוני

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

A prime number is a number that is only divisible by 1 and N, where N is the number itself. For example, if the value of N is 7, then N divided by 1 is 7 divided by 1.

הסקריפט למטה, כאשר מופעל, יבצע את הפעולות הבאות:

  • עם למשתמש להזין מספר.
  • ביצוע חלוקה באמצעות המספר הנתון כמנוי, והמחלקים הם המספרים מ-2 עד למספר הנתון פחות 1. זה אומר שאם הערך הנתון הוא 7, המחלקים הם 2, 3, 4, 5 ו-6, בהתאמה.
  • אם המנתוק היא מספר שלם, זה אומר שהמספר הקלט אינו מספר ראשוני ואז הלולאה תיפסק.
  • אם המנתוק אינו מספר שלם, זה אומר שהמספר הקלט הוא מספר ראשוני.

העתק ושמור את הסקריפט כ-isPrime.ps1

$num = Read-Host "Input a number"

$isPrime = $true
for ($y = 2 ; $y -lt $num ; $y++ )
{
    if (($num / $y) -is [int]) {
        Write-Host "$num is not a prime number"
        $isPrime = $false
        break
    }
}

if ($isPrime -eq $true) {
    Write-Host "$num is a prime number"
}

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

Using for loop in a script to determine a prime number

סיכום

הלולאה for של PowerShell לא מביאה הפתעות בהשוואה לאופן פעולת הלולאה for בשפות אחרות – וזה עושה את זה קל יותר להתאים אם אתה לא חדש במושג.

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

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

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

קריאה נוספת

Source:
https://adamtheautomator.com/powershell-for-loop/