
dir הוא אובייקטים ולא טקסט בלבד, לכן אפשר להעביר אותם בצינור ל-Where-Object ולסנן לפי מאפיין כמו Length. המרצה מדגים סף של 800 קילו-בייט ואחר כך של 10 מגה-בייט.$args מקבל ערכים לפי המיקום, ו-param מאפשר לתת לכל פרמטר שם. לפרמטר אפשר להגדיר ערך ברירת מחדל, למשל תיקיית הבית של המשתמש מתוך $env:HOMEDRIVE ו-$env:HOMEPATH, כך שהפונקציה עובדת גם בלי קלט.if.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 כדי שהריצה תמשיך.הטקסט המלא של הדקות הראשונות בהרצאה «Powershell functions» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם ברוכים 40 להרצאה על פונקציות אנחנו נבין איך עושים פונקציות מה זה פונקציות למה זה חשוב איך משתמשים בהם איך קולטים פרמטרים איך משתמשים באאוטפוט שלהם אז בואו נתחיל קודם כל פונקציה זה חתיכה קטנה של קוד שעושה משהו קטן בתוך סקריפט הגדול שלי נניח זה הסקריפט שלי נניח שזה הסקריפט
שלי והוא מאוד מאוד גדול אנחנו יכולים לשמור אותו ולכתוב לו, נניח, לקרוא לו my tools 2. נקרא לו my tools 2, וזה הסקריפט שלי. הוא יכול לייבא יוזרים, הוא יכול לעשות המון המון דברים ל-Active Directory, לשלוף לי תיבות דואר גדולות, יש לו הרבה דברים שהוא יודע לעשות, הסקריפט הזה.
שזה עכשיו את התפקוד הגדול שלו מחלקים לתתי משימות לפונקציות קטנות עכשיו איך עושים פונקציות קטנות? נניח אני יכול לעשות פאנקשן, לכתוב פאנקשן ולהגיד לו תראה לי לארג' פיילס, תראה לי קבצים גדולים ואז אני עושה פונקציה שיש פה כמה פקודות שעושים קבצים גדולים לדוגמה אנחנו יכולים לעשות לו דיר על איזושהי
תיקייה נניח על התיקייה של היוזר שזה התיקייה של היוזר שלי לעשות לו דיר עליה ובואו נראה שזה באמת עובד, אני מסמן את הפקודה, רק את החלק הכחול אני מריץ, אתם רואים?
run selection וזה run script, אני לא רוצה את כל הקובץ, אני רוצה לבדוק שהפקודה שלי תקינה כן, הנה זה מראה לי, ומה אני רואה? שהוא מראה לי את זה בלי תתי תיקיות, אז אני צריך מינוס recursive לעשות את זה recursive, ונניח שאני רוצה רק קבצים גדולים עכשיו, אז אני מכניס את הכל לדולר files,
למשתנה שנקרא files ואז אני עושה פה דולר פיילס הכנסתי את הפלט של הפקודה לתוך המשתנה דולר פיילס ודולר פיילס אני מעביר לפייפ ובפייפ אני אשלוף רק את האובייקטים שגדולים מנניח מאיזשהו שהלנק שלהם אבל צריך פה את הדבר הזה כן שהלנק שלהם greater than יותר גדול מנניח 800 קילו בייט אוקיי עכשיו מה זה אומר? אני יכול להריץ את הפקודה
הזאת אתם רואים, הנה הרצתי אותה פה הכל נכנס לתוך הפיילס, עכשיו במשתנה פיילס יושבים כל הנתונים, אתם יכולים לראות אותם פיילס, נקודה קאונט, אתם יכולים לראות קאונט ולראות כמה שורות יש פה, יש פה 20 שורות כן, ואנחנו יכולים גם לראות אותם שימו לב, זה אובייקט, אז אני... זה לא רק טקסט שנכנס עם השמות
נכון, בדוס או בלינוקס אם הייתם מריצים דבר כזה, בתוך משתנה יושב טקסט שהוא היה לא מבין מה לעשות פה קאונט ספר לי פיילס מראה לי את כל הנתונים יש פה 20 קבצים כולל תיקיות כי זה מכונה וירטואלית נקייה עכשיו אני אומר לו כזה דבר אז אמרנו שפיילס קאונט יש 20 אבל אם אני
מריץ את זה עם הפקודה where object greater than 80 אנחנו יכולים לראות פה שאחרי הרצה של פקודה הזאת יצא לנו רק שלושה קבצים הקובץ הזה קובץ טקסט קובץ לינק ועוד איזשהו קובץ אוקיי יפה מאוד עכשיו זאת אומרת שהפקודות שלנו תקינות עכשיו בואו נבדוק איך עובדת פונקציה, כן?
למה פונקציה? כי אני לא רוצה להריץ כל פעם את הפקודות האלו, ותחשוב שיש פה יותר פקודות. אני יכול להגיד רק קבצי טקסט לדוגמה. לדוגמה, אני יכול לעשות פה מינוס end ולהגיד לו שיראה לי where object greater than 800 ו-end ולהגיד לו עוד פעם נניח where object עוד פעם, אני מעביר את התוצאות של ה-where object הראשון אני
מכניס לפייפ ופייפ שולף לי אותם אחד אחד. אני אומר עכשיו, תשלוף לי אותם אחד-אחד ותבדוק שמה שיצא לך זה האובייקט הנוכחי בפייפ. הפייפ הזה, שימו לב, הפייפ הזה מקבל רק את האובייקטים אחרי סינון, מעביר אותם אחד-אחד ל-Ware Object, ו-Ware Object מכניס לי אותם לפה ואני עושה לו לדוגמה נקודה טייפ,
יש דבר כזה? לינק טייפ, אני לא יודע מה הוא נותן לי. עכשיו, אם אני לא יודע מה לעשות, אני עושה פורמט ליסט כוכבית ומסתכל על הנתונים.
נסתכל על הנתונים ולראות מה יש לנו פה. הטייפ של קבצים, איפה יש לי פה טייפ של קבצים? הנה פה, אני רואה extension lnk. extension lnk אני ראיתי פה, נכון?
extension ראיתי פה. lnk, הנה extension lnk. אני מניח שיהיה לי גם extension טקסט. בוא ננסה. בוא ננסה, עכשיו, אם אנחנו יודעים, אנחנו מנסים, ולא קרה כלום.
ככה כותבים סקריפט. גם אני עושה את זה פעם ראשונה, בדיוק את זה. Equals, נניח אני רוצה שזה יהיה שווה לנקודה TXT. בואו נראה אם זה יעבוד. אתם רואים, שלף לי רק קובץ TXT. יפה מאוד.
זאת אומרת, Pipe מוציא לי תוצאות ומחבר אותן לפקודה קודמת. אם אני לא רוצה Pipe ארוך כזה, אני יכול להכניס הכל למשתנים, וזהו, להכניס הכל למשתנים. לדוגמה, לעשות files שווה, או שאני יכול לשרשר הכל כפקודה אחת, אני יכול גם להשתמש בלי פקודת עצר, אוקיי?
יפה מאוד. לדוגמה אני יכול לעשות כזה דבר: $step2 שווה לפיילס טה טה טה טה טה ועכשיו אני יכול לעשות step2 pipe מה שעושה pipe הוא שופך כל לתוך צינור זאת אומרת פיילס מקבל תוצאה של זה step2 מקבל את כל הפיילס שנשפכו לצינור ועברו סינון עם ה-wareobject אחרי זה ה-step2 נשפך בעצמו ל-pipe ועבר סינון עם
השורה הבאה אוקיי יפה מאוד ולקרוא לזה לדוגמא דולר סטפ שלוש אוקיי דולר סטפ שלוש ולהגיד לו ככה בבקשה אוקיי אפשר לעשות דבר כזה אפשר לעשות הכל גם בשורה אחת אין שום בעיה לעשות בסקריפט בשורה אחת הכל גם את כל זה אפשר לעשות בשורה אחת איך נעשה את זה בשורה אחת נגיד לו תקשיב תיקח את כל הדיר תשפוך הכל בפייפ לפה תסנן הכל עם וויר אובייקט ותסנן הכל עוד פעם עם עוד פעם עם וויר
אובייקט וזה אמור לתת לי אותה תוצאה בדיוק בוא נבדוק מה אומר לי שהוא לא יודע כי חסר לי פה פייפ בוא ננסה עכשיו הבנתם אתם בונים סקריפט איך שאתם רוצים בודקים שורה שורה הנה יפה מאוד יפה מאוד אז בוא נשאיר לדוגמה את הדבר הזה נמחק את זה נעשה את זה דולר פיילס ונעשה שתי שורות שיהיה לנו ככה אני יכול להגיד לו תראה לי רק את התיקיות בוא נעשה עוד פונקציה עכשיו
איך אני משתמש בהם אני לוקח עכשיו את כל הדבר הזה מריץ אותו יש לי בזיכרון פונקציה והיא רק בסשן הזה, אחרי זה נראה איך אפשר לעשות לה אקספורט אבל נקראת לארג' פיילס, עכשיו אני יכול לבוא מאיזשהו קוד באמצע העבודה ולהריץ את הקוד הזה שנקרא לארג' פיילס אתם רואים לארג' פיילס? ואני מריץ והוא נותן לי תוצאה, הרצתי לארג' פיילס, קיבלתי תוצאה,
אוקיי? יפה מאוד. עכשיו, התוכנה שלי, הסקריפט שלי, יש לו את החלק הזה של הפונקציות, לרוב זה נקרא חלק דקלרטיבי שאני מצהיר על פונקציות וזה המיין שלי, התוכנה הראשית שלי שהיא עושה כל מיני פעולות לדוגמה להריס את הלארג' פיילס זה התוכנה הראשית
וזה החלק שמצהיר על הפקודות אני יכול לעשות run סקריפט ובעצם מה שיעשה run סקריפט הוא יריץ את כל הקובץ הזה ברצף תראו את זה בבקשה אתם רואים הוא יריץ את הסקריפט PS1 ואז זה הפלט של הסקריפט שלי שזה שלושה קבצים גדולים אם אני אעשה שזה יותר מ-900 ואני מריץ את הסקריפט בואו ננקה את המסך בבקשה my tools ps1 שתי תוצאות מעל 900 זה לארג' פיילס אוקיי
זאת אומרת זה הסקריפט הגדול זה לארג' פיילס בואו נרשום עוד איזושהי פונקציה לרוב ככה נראות בעצם הסקריפטים בסקריפטים בהתחלה יש פונקציות ואחרי זה יש תוכנה ראשית שנורא קל לקרוא אותה כי אין לה כתוב לה רק תראה לי לארג' פיילס בוא נעשה עוד איזושהי פונקציה סתם, דוגמא, פאנקשן שנקרא, לא יודע מה, show subdirectories.
show subdirectories. גם פה אני אעשה, עוד מעט אנחנו נעשה עם פרמטרים ונשתמש בתוצאות והכל. ועכשיו אני אעשה אותו דבר, רק אני רוצה להראות תתי תיקיות, כן, אני רוצה להראות תתי תיקיות.
אז אני צריך משהו אחר, בוא נראה שזה עובד עכשיו אם אני לא רוצה שמשהו ירוץ אני עושה לו סולמית סולמית זה כמו הערה, היא נצפת בירוק ואז אני יכול להריץ רק את החלק קוד הזה מנקה את המסך, מריץ את כל הסקריפט שלי, שימו לב כוכבית זה אומר שהוא לא שמור ברגע שאני מריץ את הסקריפט הוא שומר אותו ואז מריץ אותו
בואו נראה את התוצאה של ההרצה שלי הנה הריץ לי את הסקריפט ורץ רק show subdirectory ואז אני רואה שהוא מראה לי רק את התיקיות בלי קבצים רק משהו שהוא דירקטורי יפה מאוד, רק תתי תיקיות יופי, נותן לי פלט של תתי תיקיות ועכשיו אני יכול לעבוד איתו
יפה מאוד, עכשיו מה אני יכול לעשות הלאה? אני יכול להמשיך לעבוד עם הפלט הזה, כן? זאת אומרת, אני יכול לעשות דבר כזה נניח show sub directories או show large files ולעבור על התוצאות בואו נראה איך אני עובר על התוצאות נניח אני עושה כזה דבר אני עושה דולר טמפ לדוגמה, טמפ, אבל זה לא שמות טובים,
רזולט. אני לוקח את התוצאות של לארג' פיילס, של הפונקציה, ומתחיל לעבוד איתו. לדוגמה, for each אני עובר על כל תוצאה ומדפיס אותה, או שאני עובר על כל תוצאה ועושה איתה משהו.
לדוגמה, לולאת for each יודעת לעבור על כל שורה, כן? אפשר לעשות for each, אפשר לעשות, בואו נעשה, מה נעשה עם לארג' פיילס?
בואו נדפיס את זה, בואו נדפיס אותם פשוט, אוקיי? בואו נדפיס את זה, דמה. for each dollar file in dollar result. בואו נעשה איזה משהו.
write host, תדפיס על המסך. dollar file, נקודה. תדפיס את זה על המסך. זאת אומרת, אני משתמש פה ב-large file בתוצאות שלהם, בואו נראה. ככה אני מאלתר אתכם ביחד. הנה בבקשה, הדפיס לי רק את השמות של הקבצים, אוקיי?
יפה מאוד יופי אני יכול לעשות בוא נראה את כל המאפיינים של האובייקט לא רק to string זה רק פונקציה to string אני רוצה פורמט ליסט כוכבית זה לראות את כל המאפיינים של האובייקט אני רואה פה את כל המאפיינים שלו ואני רוצה את הגודל שלו נניח length להדפיס את הלנק שלו ולהדפיס את הנתיב שלו אני יודע מה דירקטורי
ניים פול ניים הנה פול ניים אז בוא נעשה ככה נעשה פורמט טייבל תדפיס לי טבלא עם פול ניים פול ניין ולנקס בוא ננסה בבקשה אנחנו רואים את הנתיב המלא ואת הפונקציה יפה מאוד ואת כל זה אנחנו יכולים לעשות את זה פורמט טייבל עשינו פורמט טייבל פורמט ליסט בוא נעשה פורמט ליסט יותר נחמד נכון לנקס זה פול ניין לנקס זה פול ניין בסדר בקיצור מה אנחנו באים פה ללמוד שיש