כיצד פועלים Powershell Foreach, While ולולאות אחרות

כיצד פועלים Powershell Foreach, While ולולאות אחרות

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





מתי נוצר חשבון הג'ימייל שלי?

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





Powershell ForEach Loops: הדלת לטיפול נתונים מתקדם

ForEach הוא הכינוי של ForEach-Object. (כינוי הוא רק קיצור דרך לפקודה ב- PowerShell.) זהו זמן טוב לדבר על הדרך שבה PowerShell מטפל בנתונים.





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

$yourVar = Get-ChildItem *
foreach ($file in $yourVar){
Your Steps
}

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



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

בניית מערכת ארכיון קבצים באמצעות לולאות ForEach

בואו נשבור את השלבים. אתה משתמש Get-ChildItem כדי לקבל את כל הקבצים בתיקיית מסמכים. משתנה הסביבה $ env: USERPROFILE מריץ את הסקריפט באמצעות הפרופיל הנוכחי. משתנה זה נייד יותר מנתיב עם קוד מקודד. תוצאות החיפוש מוקצות למשתנה $ MyDocs . לאחר מכן אנו יוצרים את לולאת ה- ForEach שלנו על ידי כך שהוא יעבור בכל אחת מהן $ Doc ב- $ MyDocs .





$oldDocs = @()
$MyDocs = Get-ChildItem -Path '$($env:USERPROFILE)Documents' -Recurse
foreach ($doc in $MyDocs){
if($doc.LastAccessTime -lt $(Get-Date).addDays(-30)){
$oldDocs += $doc
}
}
$ArchiveFolder = New-Item -Path '$($env:USERPROFILE)Documents$((Get-Date -Format MMddyy).toString())' -ItemType Directory
foreach ($doc in $oldDocs){
Move-Item -Path $doc.FullName -Destination '$($ArchiveFolder.FullName)$($doc.Name)' -Confirm $false
}
$source = $ArchiveFolder.FullName
$destination = '$($env:USERPROFILE)Documents$($ArchiveFolder.Name).zip'
Add-Type -AssemblyName 'system.io.compression.filesystem'
[io.compression.zipfile]::CreateFromDirectory($source, $destination)
if(test-path $destination){
Remove-Item -Path $ArchiveFolder -Recurse -Confirm $false
}

בתוך הלולאה, אנו בודקים אם כל קובץ קיים LastAccessTime הנכס מעל 30 יום. אנחנו מקבלים את זה עם השג תאריך cmdlet, ושימוש ב- AddDays לתפקד עם שלישים שליליים. אם כן, נוסיף את הקובץ ל- $ myOldDocs מַעֲרָך. לאחר סיום מיון הקבצים, אנו לוקחים את המערך שהושלם ויוצרים קובץ zip. תהליך זה הוא קצת יותר מסובך מכיוון שהוא כרוך בהפעלת מעט .NET. אל תדאג אם אתה לא ממש מבין אותו - אתה יכול לגנוב ממנו את הקוד מסמך עזרה זה של TechNet .

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





While and Do While: לולאות על תנאי

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

i=0
while(i<10){
Your Steps
i+=1
}

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

do{
Your Steps
}while(Conditional Statement)

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

כיצד לשמור תמונות סנאפצ'ט מבלי שהם ידעו

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

הפעל מחדש ובדוק: שימוש בלולאת Do-While

התסריט הזה קצת יותר פשוט. ראשית, אתה משתמש ב- הדלק את המחשב מחדש פקודה לאתחל את המכונה המרוחקת. (השתמשנו כאן ב- IP דמה לפקודות האתחול, הקפד להחליף זאת עם ה- DNS/IP של המחשב שלך). לאחר מכן צור את משתנה הנגד, אני והגדר אותו ל- 0. לאחר מכן, יש לך את לולאת ה- Do שלך עם Start-Sleep שעוצרת את התסריט למשך 300 שניות (חמש דקות). פקודה שנייה מוסיפה אחת לדלפק.

Restart-Computer -ComputerName 127.0.0.1
i=0
do{
Start-Sleep -Seconds 300
$i += 1
}while((!(Test-Connection 127.0.0.1 -Quiet)) -or $i -gt 3)
if($i -gt 3){
Write-Ouput 'Remote Machine not responding, please check.'
}
else{
Write-Output 'Reboot Succeeded'
}

אז יש לנו את הקריטריונים של While. אנו משתמשים בבדיקת אור כדי להבטיח כי כישלון יוצר התראה. האלטרנטיבה היא התסריט בלולאה המחכה בלי סוף למכונה המרוחקת. כדי לבדוק את המכונה, אנו משתמשים ב- חיבור בדיקה cmdlet. לשם הפשטות, זהו פינג עבור PowerShell. אנו מוסיפים את הפרמטר -שֶׁקֶט מה שמאלץ אותו להחזיר נכון או לא נכון ולא את תוצאות החבילות. החלק השני של הצהרת אור בודק אם המונה הוא יותר משלוש.

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

לולאות אחרות

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

for($i = 0;$i -lt 10;$i++){
Your Steps
}

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

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

ממשיכים לצמוח איתך

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

מהו סקריפט חכם של PowerShell שיצרת באמצעות לולאות? שתף אותנו בהערות.

לַחֲלוֹק לַחֲלוֹק צִיוּץ אימייל מחק את הקבצים והתיקיות של Windows כדי לפנות שטח דיסק

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

קרא הבא
נושאים קשורים
  • תִכנוּת
  • פגז כוח
  • תסריט
על הסופר מייקל מק'קונל(פורסמו 44 מאמרים)

מייקל לא השתמש ב- Mac כשהם נידונים לאבדון, אך הוא יכול לקודד ב- Applescript. הוא בעל תארים במדעי המחשב ובאנגלית; הוא כותב על מק, iOS ומשחקי וידיאו מזה זמן מה; והוא קוף IT במשך היום במשך יותר מעשור, והתמחה בסקריפטים ווירטואליזציה.

האם החברים שלי בפייסבוק יכולים לראות אם אני בטינדר
עוד מאת מייקל מק'קונל

הירשם לניוזלטר שלנו

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

לחצו כאן להרשמה