PracticU

Powershell functions

בלי כתוביותעם כתוביות
PracticU › קורס PowerShell › Powershell functions
מילון מושגים:
PowerShell - סביבת שורת פקודה ושפת סקריפטים של מיקרוסופט לניהול אוטומטי של מערכות Windows ושירותים.
באג - תקלה או שגיאה בקוד שגורמת לתוכנה להתנהג בניגוד למצופה.
Active Directory - שירות מדריך של מיקרוסופט לניהול מרכזי של משתמשים, מחשבים והרשאות ברשת ארגונית מבוססת דומיין.
מאפיין - תכונה שמצמידים לרכיב ומתארת אותו או את התנהגותו, למשל מאפיין של תגית HTML או שדה באובייקט.
בייט - יחידת מידע המורכבת משמונה ביטים, ומסוגלת לייצג תו בודד או מספר בין 0 ל-255.
שורת פקודה - ממשק טקסטואלי שבו מקלידים פקודות למערכת ההפעלה ומקבלים תגובה בטקסט, במקום להשתמש בעכבר.
דיבאג - תהליך של איתור, הבנה ותיקון תקלות בקוד, לעיתים בעזרת כלי שמאפשר לעצור ולעקוב אחר ריצת התוכנית.
סשן - פרק זמן של פעילות רציפה בין משתמש למערכת, שבו נשמר מידע על מצבו, למשל לאחר התחברות לאתר.

Powershell functions
בהרצאה הזאת לומדים לכתוב פונקציות ב-PowerShell: איך מחלקים סקריפט גדול למשימות קטנות, איך מעבירים להן פרמטרים, ואיך מאתרים באגים בעזרת נקודות עצירה.
השלבים העיקריים
1. פונקציה כמשימה קטנה: סקריפט גדול, למשל כלי לניהול Active Directory, מתחלק לפונקציות שכל אחת עושה דבר אחד. בדוגמה נכתבה פונקציה שמציגה את הקבצים הגדולים בתיקייה, והיא נקראת מכל מקום בקוד.
2. סינון אובייקטים: הפלט של dir הוא אובייקטים ולא טקסט בלבד, לכן אפשר להעביר אותם בצינור ל-Where-Object ולסנן לפי מאפיין כמו Length. המרצה מדגים סף של 800 קילו-בייט ואחר כך של 10 מגה-בייט.
3. משתנים וצינורות: הפלט של פקודה נשמר במשתנה, והמשתנה נשפך לצינור לשלב הבא. אותה תוצאה מתקבלת בכמה שורות נפרדות או בשורה אחת, והשלבים רצים לפי הסדר.
4. קליטת פרמטרים: $args מקבל ערכים לפי המיקום, ו-param מאפשר לתת לכל פרמטר שם. לפרמטר אפשר להגדיר ערך ברירת מחדל, למשל תיקיית הבית של המשתמש מתוך $env:HOMEDRIVE ו-$env:HOMEPATH, כך שהפונקציה עובדת גם בלי קלט.
5. מבנה סקריפט: הפונקציות מוגדרות בחלק העליון, ובתחתית התוכנית הראשית שקוראת להן. בהמשך הסקריפט הורץ גם מבחוץ, עם הפרמטרים שנמסרים משורת הפקודה.
6. דיבאג: נקודת עצירה (breakpoint) עוצרת את הסקריפט בשורה מסוימת. משם אפשר לעבור שורה אחרי שורה, לראות את תוכן המשתנים ולצאת מהפונקציה. כדי לעצור רק במקרה מסוים אפשר לעטוף את הנקודה בתנאי if.
7. שמירה לפרופיל: פונקציה שהוגדרה בחלון אחד קיימת רק באותו סשן. כדי שתהיה זמינה תמיד, שומרים אותה בקובץ פרופיל ‎.ps1 בתיקיית PowerShell של המשתמש, והיא נטענת בכל פתיחה.
פקודות והגדרות
- dir <נתיב> -Recurse לסריקה כולל תתי-תיקיות.
- Where-Object לסינון, Select-Object -First 5 לבחירת החמישה הראשונים, ו-Sort-Object למיון לפי שם מלא.
- Format-List * מציג את כל המאפיינים של האובייקט, ו-Format-Table מציג עמודות נבחרות.
- Out-File -Append מוסיף שורות לקובץ בלי למחוק את הקודמות, ו-Get-Content קורא את הקובץ בחזרה.
- בתוך ForEach-Object הבלוק begin רץ פעם אחת לפני המעבר, והבלוק process רץ על כל אובייקט. Get-Date מציג את זמן ההרצה.
טעויות נפוצות
- שגיאת Access denied בתיקיות מערכת. בסקריפט עטפו את הקריאה ב-try ו-catch כדי שהריצה תמשיך.
- פונקציה שנכתבה בסשן לא תהיה זמינה בחלון חדש בלי קובץ הפרופיל.
- Execution Policy יכול למנוע הרצת סקריפטים. המרצה מזכיר שזה נושא נפרד, ושיש לאפשר הרצה של סקריפטים מקומיים בזהירות.
שימו לב
פונקציה חוסכת העתקה של אותו קוד למקומות רבים: מי שצריך אותו יותר מפעם אחת מעביר אותו לפונקציה וקורא לה. בסיום ההרצאה אפשר לכתוב סקריפט עם פונקציות, פרמטרים ופרופיל, ולהריץ אותו ישירות בכל פעם שצריך.
השיעור הבא בקורס: Powershell pipeline

פרקי ההרצאה: Powershell functions

  1. 00:00

    מהי פונקציה ולמה היא חשובה

  2. 01:25

    סינון קבצים גדולים עם Where-Object

  3. 04:15

    שרשור סינונים עם Pipeline

  4. 04:50

    בדיקת מאפיינים של אובייקט עם Format-List

  5. 08:03

    הגדרת פונקציה לקבצים גדולים

  6. 09:42

    פונקציה להצגת תתי תיקיות

  7. 11:42

    מעבר על תוצאות עם לולאת For Each

תמלול ההרצאה: Powershell functions

הטקסט המלא של הדקות הראשונות בהרצאה «Powershell functions» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:27

    שלי והוא מאוד מאוד גדול אנחנו יכולים לשמור אותו ולכתוב לו, נניח, לקרוא לו my tools 2. נקרא לו my tools 2, וזה הסקריפט שלי. הוא יכול לייבא יוזרים, הוא יכול לעשות המון המון דברים ל-Active Directory, לשלוף לי תיבות דואר גדולות, יש לו הרבה דברים שהוא יודע לעשות, הסקריפט הזה.

  3. 00:59

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

  4. 01:25

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

  5. 01:40

    run selection וזה run script, אני לא רוצה את כל הקובץ, אני רוצה לבדוק שהפקודה שלי תקינה כן, הנה זה מראה לי, ומה אני רואה? שהוא מראה לי את זה בלי תתי תיקיות, אז אני צריך מינוס recursive לעשות את זה recursive, ונניח שאני רוצה רק קבצים גדולים עכשיו, אז אני מכניס את הכל לדולר files,

  6. 02:02

    למשתנה שנקרא files ואז אני עושה פה דולר פיילס הכנסתי את הפלט של הפקודה לתוך המשתנה דולר פיילס ודולר פיילס אני מעביר לפייפ ובפייפ אני אשלוף רק את האובייקטים שגדולים מנניח מאיזשהו שהלנק שלהם אבל צריך פה את הדבר הזה כן שהלנק שלהם greater than יותר גדול מנניח 800 קילו בייט אוקיי עכשיו מה זה אומר? אני יכול להריץ את הפקודה

  7. 02:49

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

  8. 03:14

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

  9. 03:29

    מריץ את זה עם הפקודה where object greater than 80 אנחנו יכולים לראות פה שאחרי הרצה של פקודה הזאת יצא לנו רק שלושה קבצים הקובץ הזה קובץ טקסט קובץ לינק ועוד איזשהו קובץ אוקיי יפה מאוד עכשיו זאת אומרת שהפקודות שלנו תקינות עכשיו בואו נבדוק איך עובדת פונקציה, כן?

  10. 03:57

    למה פונקציה? כי אני לא רוצה להריץ כל פעם את הפקודות האלו, ותחשוב שיש פה יותר פקודות. אני יכול להגיד רק קבצי טקסט לדוגמה. לדוגמה, אני יכול לעשות פה מינוס end ולהגיד לו שיראה לי where object greater than 800 ו-end ולהגיד לו עוד פעם נניח where object עוד פעם, אני מעביר את התוצאות של ה-where object הראשון אני

  11. 04:24

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

  12. 04:50

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

  13. 05:00

    נסתכל על הנתונים ולראות מה יש לנו פה. הטייפ של קבצים, איפה יש לי פה טייפ של קבצים? הנה פה, אני רואה extension lnk. extension lnk אני ראיתי פה, נכון?

  14. 05:15

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

  15. 05:32

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

  16. 05:55

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

  17. 06:20

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

  18. 06:58

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

  19. 07:37

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

  20. 08:13

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

  21. 08:41

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

  22. 09:03

    וזה החלק שמצהיר על הפקודות אני יכול לעשות run סקריפט ובעצם מה שיעשה run סקריפט הוא יריץ את כל הקובץ הזה ברצף תראו את זה בבקשה אתם רואים הוא יריץ את הסקריפט PS1 ואז זה הפלט של הסקריפט שלי שזה שלושה קבצים גדולים אם אני אעשה שזה יותר מ-900 ואני מריץ את הסקריפט בואו ננקה את המסך בבקשה my tools ps1 שתי תוצאות מעל 900 זה לארג' פיילס אוקיי

  23. 09:40

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

  24. 10:00

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

  25. 10:22

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

  26. 11:01

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

  27. 11:24

    יפה מאוד, עכשיו מה אני יכול לעשות הלאה? אני יכול להמשיך לעבוד עם הפלט הזה, כן? זאת אומרת, אני יכול לעשות דבר כזה נניח show sub directories או show large files ולעבור על התוצאות בואו נראה איך אני עובר על התוצאות נניח אני עושה כזה דבר אני עושה דולר טמפ לדוגמה, טמפ, אבל זה לא שמות טובים,

  28. 12:01

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

  29. 12:15

    לדוגמה, לולאת for each יודעת לעבור על כל שורה, כן? אפשר לעשות for each, אפשר לעשות, בואו נעשה, מה נעשה עם לארג' פיילס?

  30. 12:25

    בואו נדפיס את זה, בואו נדפיס אותם פשוט, אוקיי? בואו נדפיס את זה, דמה. for each dollar file in dollar result. בואו נעשה איזה משהו.

  31. 12:53

    write host, תדפיס על המסך. dollar file, נקודה. תדפיס את זה על המסך. זאת אומרת, אני משתמש פה ב-large file בתוצאות שלהם, בואו נראה. ככה אני מאלתר אתכם ביחד. הנה בבקשה, הדפיס לי רק את השמות של הקבצים, אוקיי?

  32. 13:16

    יפה מאוד יופי אני יכול לעשות בוא נראה את כל המאפיינים של האובייקט לא רק to string זה רק פונקציה to string אני רוצה פורמט ליסט כוכבית זה לראות את כל המאפיינים של האובייקט אני רואה פה את כל המאפיינים שלו ואני רוצה את הגודל שלו נניח length להדפיס את הלנק שלו ולהדפיס את הנתיב שלו אני יודע מה דירקטורי

  33. 13:44

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

לקורס המלא: קורס PowerShell אונליין

ההרצאה הקודמת: Get-Help

ההרצאה הבאה: Powershell pipeline

הרצאות קשורות מקורסים אחרים

  • Conversion Functions
  • פונקציות - Functions (חלק 1)
  • פונקציות - Functions
  • Meterpreter & Powershell

קורסים נוספים במסלול

  • קורס AWS - ניהול מכונה וירטואלית בענן
  • קורס Terraform - DevOps - Azure & AWS
  • קורס קוברנטיקס - Kubernetes
  • קורס Docker - עם Swarm Cluster
  • קורס DevOps - Ansible
  • קורס Git ו-GitHub עם Visual Studio