פרסומת
צעד ראשון מכריע פנימה לימוד תכנות עובד עם לולאות היסודות המוחלטים של תכנות למתחילים (חלק ב ')בחלק 2 של המדריך למתחילים המוחלט שלנו לתכנות, אעסוק ביסודות של פונקציות, ערכי החזרה, לולאות ומצבים. וודא שקראתם את חלק 1 לפני שתתמודדו עם זה, שם הסברתי את… קרא עוד . למרבה המזל, PowerShell ממשיכה לצמוח עם הכישורים שלך.
אתה יכול למסגר את הפקודות הקיימות בהן אתה משתמש כל יום בתוך לולאות כדי לחסוך זמן ומאמץ. התסריטים שלך מבצעים את ההרמה הכבדה בזמן שאתה עושה את העבודה החשובה בקריאת מאמרים נוספים ב- MakeUseOf!
Powershell ForEach Loops: הדלת לטיפול בנתונים מתקדמים
ForEach הוא הכינוי של אובייקט ForEach. (כינוי הוא רק קיצור דרך לפקודה ב- PowerShell.) זהו זמן טוב לדבר על הדרך בה PowerShell מטפל בנתונים.
כמו רוב שפות התכנות המודרניות, PowerShell הוא מונחה עצמים מאיפה תיכנות "מונחות עצמים" קיבלה את שמה?מונחה עצמים אינו רק מילת באזז אקראית שאתה שומע במעגלי תכנות. יש סיבה מאחורי השם - אבל מה? הצטרף אלי כשאני חוקר כמה מהיסודות של מושגי תכנות ומסביר ... קרא עוד . הכל ב- PowerShell הוא אובייקט, כלומר אפילו משתנים
יש מאפיינים ופונקציות מורחבים Powershell Cmdlets שישפרו את מיומנויות הניהול של WindowsPowershell הוא כלי שורת הפקודה ושווי סקריפט של חלקים שווים. זה נותן לך את האפשרות להפוך את המחשב לאוטומטי באמצעות אותן פקודות בהן אתה משתמש כדי לנהל אותו. קרא עוד . מאפיין זה הוא הסיבה שאתה יכול להגדיר את החיפושים שלך למשתנה, ובסופו של דבר עם מערך התוצאות.$ yourVar = קבל ילד-ילד * foreach (קובץ $ ב- $ yourVar) {הצעדים שלך. }
בשפות מסוימות, עיבוד מערך זה יהיה תהליך רב-שלבי. ראשית, לקבל את האורך ואז לספור כל שלב.
ב- PowerShell, אתה עובר דרך המערך ומבצע את הפעולה על כל אחד מהם באמצעות ForEach. זה חוסך לך מספר שורות קוד, וזה מועיל אם יש לך סקריפט ארוך יותר. לדוגמה, להלן סקריפט קטן שישתמש בכמה לולאות של Powershell ForEach. זה יוצר ארכיב ZIP של כל הקבצים שלא פתחתם תוך 30 יום.
בניית מערכת ארכיב קבצים באמצעות לולאות ForEach
בואו נשבר את הצעדים למטה. אתה משתמש קבל ילד-ילד כדי להשיג את כל הקבצים בתיקיית המסמכים. משתנה הסביבה מהם משתנים סביבתיים וכיצד אוכל להשתמש בהם? [Windows]מדי פעם אלמד טיפ קטן שגורם לי לחשוב "טוב, אם הייתי יודע שלפני שנה אז זה היה חוסך לי שעות של זמן". אני זוכר היטב שלמדתי איך ... קרא עוד $ env: USERPROFILE מריץ את הסקריפט באמצעות הפרופיל הנוכחי. משתנה זה נייד יותר מנתיב בקוד קשה. התוצאות של אותו חיפוש מוקצות למשתנה $ MyDocs. לאחר מכן אנו יוצרים את לולאת ה- ForEach שלנו על ידי כך שהיא תעבור דרך כל אחד $ Doc ב- $ MyDocs.
$ oldDocs = @ () $ MyDocs = Get-ChildItem-path "$ ($ env: USERPROFILE) \ Documents" -רשיע. foreach ($ doc ב- $ MyDocs) {if ($ doc. LastAccessTime -lt $ (קבל תאריך) .addDays (-30)) {$ oldDocs + = $ doc} } $ ArchiveFolder = פריט חדש-נתיב "$ ($ env: USERPROFILE) \ Documents \ $ ((קבל תאריך -Format MMddyy) .toString ())" -TypeType Directory. foreach ($ doc ב- $ oldDocs) {Move-Item-path $ doc. FullName-Destination "$ ($ ArchiveFolder. FullName) \ $ ($ doc. שם) "- אשר שקר $. } $ source = $ ArchiveFolder. שם מלא. $ יעד = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder. שם) .zip " Add-Type -Ass AssemblyName "system.io.compression.filesystem" [io.compression.zipfile]:: CreateFromDirectory ($ מקור, $ יעד) if (מבחן נתיב $ יעד) {הסר-פריט-נתיב $ ארכיב פולדר-מטפל-אישור $ שקר. }
בתוך הלולאה, אנו בודקים אם כל קובץ LastAccessTime הנכס הוא מעל 30 יום. אנו מקבלים את זה עם השג תאריך cmdlet, ושימוש ב- AddDays לתפקד עם שלושים שליליים. אם זהו, אנו מוסיפים את הקובץ לקובץ $ myOldDocs מערך. לאחר סיום מיון הקובץ, אנו לוקחים את המערך השלם ויוצרים קובץ zip. תהליך זה הוא קצת יותר מסובך מכיוון שהוא קורא מעט .NET. אל תדאג אם אתה לא ממש מבין את זה - אתה יכול לגנוב את הקוד ממנו מסמך העזרה הזה של TechNet.
כדי לפרט את מה שקורה כאן: נעביר את כל הקבצים הישנים שלנו לספרייה חדשה בשם התאריך של היום מעל 30 יום. לאחר שהתיקיה הזו בונה, עלינו ליצור את ארכיון ה- ZIP בעל אותו שם. אנו נבדוק כדי לוודא שהארכיון הצליח וקובץ ה- ZIP נמצא שם ואז נמחק את התיקיה החדשה. קבע זאת כמשימה מתוזמנת להפעלה פעם בחודש. תחסוך לעצמך מעט מקום ותשמור על תיקיית המסמכים שלך נקייה.
תוך כדי ולעשות זאת: לולאות במצב
אם ברצונך להריץ לולאה רק כאשר מתקיים תנאי מסוים, אתה משתמש בלולאת שעה. אם אתה משתמש במשתנה כדי לעקוב אחר הספירה, הגדר את זה קודם.
i = 0. בזמן (i <10) {הצעדים שלך i + = 1. }
הבעיה היא שאם אינך משתמש במונה, ייתכן שתרצה שהקוד שלך יפעל לפחות פעם אחת אפילו אם הבדיקה נכונה. זה המקרה עם התסריט לדוגמא להלן. אז במקרים האלה, אתה רוצה להשתמש בלולאה של Do-While כיצד פועלים לולאות בתכנות מחשביםלולאות הן אחד מסוגי הבקרה הראשונים שתלמדו בתכנות. אתה בטח יודע על מתי ולולאות, אבל מה עושה לולאה לעשות זאת? קרא עוד . התחביר מעט שונה.
עשה {הצעדים שלך. } while (הצהרה על תנאי)
השימוש באלו לא ברור מאליו למתכנת מתחיל. אם אתה מבצע סקריפט טיפוסי מיום ליום, יתכן שלא תיתקל בהם לעתים קרובות. היכן שהם מועילים במיוחד זה ליצור טיימר מאולתר לבדיקת הצלחת התהליך.
אנו הולכים לבנות סקריפט מהיר לאתחל מחדש של מחשב מרוחק ולהתריע אם הוא לא יחזור תוך 15 דקות. תרחיש זה מניח שמדובר בשרת ביתי או במחשב אחר שאינו מאתחל לעתים קרובות מאוד. אל תהסס להתאים את הזמן אם המחשב בדרך כלל יעלה מהר יותר.
אתחל מחדש ובדוק: שימוש בלולאת עשה
התסריט הזה קצת יותר פשוט. ראשית, אתה משתמש ב- הדלק את המחשב מחדש פקודה לאתחל מחדש את המכונה המרוחקת. (השתמשנו כאן ב- IP דמה לצורך פקודות אתחול מחדש, הקפד להחליף זאת באמצעות ה- DNS / IP של המחשב שלך). ואז צור את משתנה הדלפק, אני והגדר אותו ל- 0. בשלב הבא יש לך לולאת ה- Do שלך עם Start-Sleep עוצרת את הסקריפט למשך 300 שניות (חמש דקות). פקודה שנייה מוסיפה פקודה לדלפק.
הפעל מחדש את המחשב -מחשב מחשב 127.0.0.1. i = 0. עשה {התחל-שינה-שניות 300 $ i + = 1. } while ((! (חיבור מבחן 127.0.0.1 - שקט)) או $ i -gt 3) אם ($ i -gt 3) {Writ-Ouput "מכונת מרחוק לא מגיבה, אנא בדוק." } אחר {פלט כתיבה "אתחול מחדש הצליח" }
ואז יש לנו את הקריטריונים של While. אנו משתמשים בבדיקת אור כדי להבטיח שכישלון יוצר התרעה. האלטרנטיבה היא התסריט שמסתובב בלי סוף ומחכה למכונה המרוחקת. כדי לבדוק אם המכונה אנו משתמשים במכשיר חיבור מבחן cmdlet. לשם הפשטות זהו Ping for PowerShell. אנו מוסיפים את הפרמטר שקט מה שמאלץ אותה להחזיר נכון או לא נכון ולא את תוצאות המנות. החלק השני של הצהרת אור בודק אם הדלפק הוא יותר משלושה.
לאחר השלמת הלולאה, אנו רוצים ליצור את הפלט. זה אומר שאנחנו צריכים לבדוק את הדלפק שלנו. זוהי הצהרה מהירה של אם / אחר. אם הוא גדול משלוש, פלט התסריט שהמחשב המרוחק אינו מגיב. אם לא, פירוש הדבר שההפעלה מחדש הצליחה.
לולאות אחרות
ישנם שני סוגים אחרים של לולאות זמינים ב- PowerShell. הם קשורים במידת מה לשני הלולאות הקודמות, הם פשוט לא נפוצים. הלולאה For For עובדת בדומה לדוגמה While. אתה קובע את כל הקריטריונים שלך בהערכה ואז הגדר את ה- cmdlets שלך.
עבור ($ i = 0; $ i -lt 10; $ i ++) {הצעדים שלך. }
עשה עד לולאות כמו לולאות עשה בזמן, אתה פשוט משנה את הצהרת While ל- עד. בתסריט לדוגמא זה יהיה זהה להתנהגות. זו בחירה בסגנון, אך ה- Do While הוא מגוון יותר במצבים אחרים. אז אם אתה זוכר רק אחת, עשה זאת מועיל יותר.
ל- PowerShell יש עזרה גם לכל אחד מהלולאות הללו. אתה יכול לקבל את העזרה על ידי הוספה על אודות לפני שם הלולאה ב- Get-Help. לאחר מכן תוכל לראות דוגמאות וטיפים אחרים לכל סוג. אלה אמורים להיות מועילים אם אתה נתקע.
ממשיך לצמוח איתך
בשלב זה יש לך את רוב המיומנויות להתחיל בבניית תסריטים חזקים. האם אוטומציה של אסדת הבית שלך 15 משימות מתקדמות ש- PowerShell יכול לטפל ב- Windows 10PowerShell דומה לשורת הפקודה, אך טוב יותר. זהו כלי רב-עוצמתי לניהול מערכות. ריכזנו עבורכם 15 משימות, חלקן פשוטות, חלקן מורכבות, המפיקות תועלת מהקסם של פאוור־שעל. קרא עוד או חוסכת זמן בעבודה, לולאות עוזרות לתסריטים שלך לעשות יותר. שילוב לולאות אלה עם טיפול בשגיאות מעביר את הסקריפטים שלך מעבר ליסודות טפל בשגיאות PowerShell כמו בוס בטיפים אלההטיפול בשגיאות PowerShell כולל ארבעה חלקים. למד כיצד לתקן אם שגיאות ועוד ב- Microsoft PowerShell. קרא עוד . זה פותח את הדלת לשפות מתקדמות יותר.
מה זה סקריפט PowerShell פיקח שיצרת באמצעות לולאות? שתפו אותנו בתגובות.
מייקל לא השתמש במחשבי מק כאשר נידונו, אך הוא יכול לקוד ב- Applescript. הוא בעל תארים במדעי המחשב ובאנגלית; הוא כתב על מק, iOS ומשחקי וידאו כבר זמן מה; והוא היה קוף IT ביום במשך למעלה מעשור, ומתמחה בתסריטים ווירטואליזציה.