PracticU

Powershell pipeline

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

Powershell pipeline
ההרצאה עוסקת בפייפ (Pipeline) של PowerShell: איך מעבירים מידע משלב לשלב, ואיך בוחרים, מסננים, ממיינים ומייצאים אובייקטים. בסופה רואים איך בונים שורה אחת שמביאה מחשבים מ-Active Directory ומפעילה עליהם שירות.
השלבים העיקריים
1. אובייקטים, לא טקסט: הפייפ מעביר את האובייקטים אחד אחד, והפקודה הבאה מקבלת כל אובייקט בנפרד. לכן אפשר לבחור שדות לפי השם שלהם.
2. בחירת שדות עם Select-Object: הפקודה מוציאה מכל אובייקט את השדות שביקשנו. אפשר גם ליצור שדה חדש בשם משלנו, שהערך שלו מגיע מהאובייקט הנוכחי בפייפ ($_). כך נוצר השדה ComputerName מתוך השדה Name.
3. שם השדה חייב להתאים לפרמטר: Get-Service מקבל מחשבים מהפייפ לפי שם המאפיין, ולכן השדה צריך להיקרא בדיוק ComputerName. שדה בשם Name נדחה עם השגיאה "cannot validate argument".
4. Get-ADComputer דורש פילטר: בלי פרמטר Filter הפקודה שואלת מה לחפש. הכוכבית * מחזירה את כל המחשבים.
5. סינון עם Where-Object: הפקודה מקבלת תנאי שמחזיר אמת או שקר. התנאי אפשר לכתוב כבלוק סקריפט בסוגריים מסולסלים, או לגשת ישירות למאפיין.
6. מיון עם Sort-Object: הפקודה ממיינת לפי עמודה. מספרים שמופיעים בתוך שם, כמו Windows 10 ו-Windows 7, ממוינים כטקסט, ולכן Windows 10 מופיע לפני Windows 7.
7. תצוגה: Format-List * מציג את כל השדות, Format-Table מציג טבלה, ו-Out-GridView פותח טבלה גרפית שאפשר למיין ולסנן בה.
8. ייצוא: Export-Csv שומר קובץ CSV שאפשר לפתוח באקסל, ו-ConvertTo-Html ממיר את הפלט לדף HTML.
9. הפעלה ועצירה: Start-Service ו-Stop-Service מקבלים רשימה של אובייקטי שירות ולא שמות, ולכן מעבירים אליהם את הפלט של Get-Service.
10. סוגריים: פקודה בתוך סוגריים רצה קודם, והפלט שלה נכנס לפקודה הראשית כערך לפרמטר.
פקודות והגדרות
הפקודות שנכתבו בהרצאה: Get-Service bits, Get-ADComputer -Filter *, Select-Object, Format-List *, Export-Csv bits.csv, ConvertTo-Html ו-Set-Alias NP notepad. לעזרה על פקודה משתמשים ב-Get-Help או בחלון Show-Command, ו-Ctrl+Space נותן השלמה אוטומטית.
טעויות נפוצות
- ניסיון להעביר שם של שירות בלבד ל-Start-Service: הפקודה לא מקבלת מחרוזת, ולכן צריך להעביר לה את האובייקטים שמחזיר Get-Service.
- הנחה ששמות השדות זהים בין פקודות: לפני חיבור לפייפ בודקים עם Format-List * אילו שדות יש בפועל.
- העברת פלט מלא של פקודה פנימית לתוך סוגריים: הפלט נכנס כטקסט ארוך ולא כשם מחשב. לכן בוחרים רק את השדה הנדרש עם Select-Object.
שימו לב שפייפ מעביר אובייקטים אחד אחד, ולא את כל הרשימה בבת אחת. מי שמבין את זה יכול לבנות שאילתה שמביאה מחשבים מ-Active Directory, מסננת אותם ומפעילה עליהם שירות.
השיעור הבא בקורס: Powershell object

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

  1. 00:00

    הכנת סביבת ה-ISE והכרת הפייפ

  2. 00:36

    Sort-Object ו-Get-Service בממשק הגרפי

  3. 01:48

    קריאת Get-Help ופרמטר ComputerName

  4. 05:08

    שליפת מחשבים מ-Active Directory

  5. 06:38

    חיבור שמות המחשבים דרך הפייפ

  6. 08:30

    שגיאת Cannot validate ושם המאפיין

  7. 09:12

    Select-Object ושדה מחושב בשם Computer Name

  8. 13:04

    Get-Service מהפייפ והצגת שם המחשב

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

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

  1. 00:02

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

  2. 00:36

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

  3. 00:59

    אם אני רוצה לדעת את הפרמטרים שלה אני יכול לעשות show details ונפתח לי חלון עם כל הפרמטרים שאני צריך להאזין לפקודה כן, זה גם פה יש לכם את זה, show command windows זה נקרא, תכף נעשה את זה ככה, כן, אז נניח אנחנו יכולים לעשות get services ומה שבכוכבית זה חובה,

  4. 01:26

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

  5. 01:46

    זאת אומרת, יש לנו כמה ענפים לעץ. אם נעשה get help על get services, נניח, אתם תראו שגם פה יש לנו כמה ענפים לעץ. אתם רואים?

  6. 02:03

    יש get service, זה ענף אחד, זה הענף השני וזה הענף השלישי. שימו לב מה ההבדל שיש פה name ופה יש כבר input object, אוקיי?

  7. 02:15

    זאת אומרת הוא לפי הפרמטרים של input קובע מה זה מה. בואו תראו יש tab ראשון default ויש לו computer name זה ה-default וזה ה-computer name זה הענף הראשון זה הענף הראשון display name אתם רואים חווה אצלו שם של סרוויס שזה הענף השני נכון למה כי למה הוא קרא לו display name כי הוא חווה אתם רואים זה שדה חווה כי הוא בסוגריים מרובעים

  8. 02:51

    יפה מאוד ולאבא הוא קרא input object לפי הדבר הזה שזה משהו מיוחד בחתימה זאת אומרת הוא מזהה משהו מיוחד בחתימה יש לנו שלוש דרכים לכתוב את הפקודה get service שזה בדיוק מה שדיברנו בהרצאה על get help יפה מאוד אני עושה דבר כזה בוא ננקה רק את המסך שזה כלי host ועכשיו כתבנו פה את נניח ביץ את הcomputer name את השמות של המחשבים שאנחנו רוצים

  9. 03:24

    לדוגמא אנחנו יכולים לרשום win7 service pack 1 זה שם של המחשב איך אני יודע מה אפשר לעשות? יש פה טרינג וסוגריים מרובעים זה אומר עם פסיקים win10 לדוגמא יש לי מחשב ויש לי מחשב dc ואני יכול להפעיל run ואני יכול לעשות קופי אם אני עושה קופי הוא נכנס לי פה בפייסט ואנחנו עשינו פייסט ויכולים להריץ את הפקודה

  10. 03:58

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

  11. 04:14

    מה אנחנו רואים פה? get service, display name ושמות של מחשבים. אני רואה שמשהו פה לא עובד. בואו ננסה לאט לאט. בואו נתחיל בלי computer name.

  12. 04:26

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

  13. 04:56

    טוב עד עכשיו זה שום דבר לא חדש בואו ניקח את השמות של המחשבים לא מהרשימה אלא אפשר לקחת את זה מקובץ אפשר לקחת את זה מאקטיב דירקטורי בואו ניקח את זה מאקטיב דירקטורי בואו ניקח את זה מהאקטיב דירקטורי בואו ניקח מהאקטיב דירקטורי נניח רשימה של כל המחשבים נעשה את זה ככה get active directory computers מינוס פילטר עכשיו למה אני יודע שפילטר חובה

  14. 05:28

    אם אני אעשה בלי פילטר הוא שואל אותי פילטר אתם רואים הוא לא מוכן להריץ פקודה בלי פילטר אם אתם תעשו get help על get active directory computer אתם תראו שהפילטר זה שדה חובה אתם רואים יש פה כמה גם ענפים אבל אתם תראו שפילטר הוא טרינק חובה זה מה שאני בא להגיד לכם אפשר פילטר ככה לכתוב אפשר לעשות ldap פילטר אבל בכל מקרה זה חובה אוקיי יפה מאוד

  15. 06:10

    אז יופי אז אנחנו עושים get active directory computer עושים enter בלי פילטר הוא שואל אותי תן לי פילטר אני יכול לעשות לו כוכבית ואז הוא נותן לי את כל המחשבים במקום לעשות אינטראקטיבית אני יכול לעשות מינוס פילטר או מינוס ldap פילטר אתם רואים פה הוא אומר או ככה או ככה, עם הפילטר כוכבית והוא נותן לי את כל המחשבים, יפה מאוד.

  16. 06:38

    עכשיו, מה אני רוצה לעשות? אני רוצה להכניס אותם ל-Get Service. אז זה נשמע טריוויאלי, נכון? Get Service, Bits, עכשיו בואו נקרא שנייה לפני שאני אגלה לכם את התשובה, Get Help ו-Get Service.

  17. 06:59

    Get Help על Get Service, אתם רואים שה-computer name מינוס פרמטר computer name, אתם רואים? הוא יכול להגיע ב-pipeline. הוא יכול להגיע בפייפליין לפי שם של פרופרטי, אוקיי? שזה Computer Name, אוקיי? אז הוא יכול להגיע בפייפליין, אני אומר מצוין.

  18. 07:28

    אז אני יודע שזה יכול להגיע בפייפליין, אז אני עושה דבר כזה. אני מכניס getService מינוס name נניח ביץ, סרוויס בשם ביץ, אני משתמש ב-positioned parameter, שזה שם של הסרוויס, ואת השם של המחשב מגיע לי מפילטר של Active Directory, נכון?

  19. 07:54

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

  20. 08:26

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

  21. 08:43

    באיזה שם של המאפיין יש לנו פה? איזה שם של המאפיין נותן לנו get filter? הוא נותן לנו name, אתם רואים? הוא נותן לנו את כל המאפיינים, אבל אין פה קומפיוטר name.

  22. 08:58

    הוא נותן לנו name, הוא נותן לנו name, אבל ה-Get Service רוצה Computer Name, הוא רוצה שהמאפיין יהיה Computer Name by Property Name, אנחנו צריכים להחליף שם למאפיין.

  23. 09:16

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

  24. 09:43

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

  25. 10:20

    שביקשתי את זה ואת זה והוא מדפיס לי את ה-Name ואת ה-Distinguish Name כי זה מה שביקשתי מה אנחנו רוצים לעשות עכשיו אנחנו רוצים להחליף את השם של השדה של Name שיהיה Computer Name זאת אומרת אנחנו רוצים מה שנקרא לעשות שדה משלנו איך אנחנו עושים שדה משלנו שזה דבר

  26. 10:39

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

  27. 11:09

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

  28. 11:49

    בפייפ ומתוכו מוצא את הנעים יפה מאוד וזה מצליח חבר'ה זה מצליח אתם רואים איך אני יודע שזה הצליח? אתם רואים?

  29. 12:00

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

  30. 12:19

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

  31. 12:30

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

  32. 12:45

    אין לנו את כל השדות, אוקיי? Select Object בחר רק את מה שביקשנו, אוקיי? יפה מאוד, ככה אני יודע, אני עושה pipe ופורמט ליסט כוכבית, יודע מה לעשות הלאה.

  33. 12:56

    עכשיו אני יכול לעשות get service, מזה התחלנו, get service bits ולא לציין לו את ה-computer name והוא ייקח את ה-computer name מתוך ה-pipe.

  34. 13:12

    איך אני יודע שהוא ייקח את ה-computer name מתוך ה-pipe? ובגט הלפ, אני מזכיר לכם, ראינו שהקומפיוטר ניין עובד מתוך הפייפ. בואו תראו, והנה זה עובד לנו.

  35. 13:25

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

  36. 13:39

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

  37. 13:53

    זה הפונקציה toString. אני צריך את השדה שנקרא MachineName. אז אני אומר לו כזה דבר: Select Object תבחר לי את השדות. אני יכול לכתוב רק Select, דרך אגב.

  38. 14:11

    Select Object רק תבחר לי את השדות כאלו. MachineName, ותבחר לי גם, אנחנו רוצים עוד MachineName, סטטוס ו-Name. בואו ניקח מפה, שזה אותו דבר, סטטוס.

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

ההרצאה הקודמת: Powershell functions

ההרצאה הבאה: Powershell object

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

  • Meterpreter & Powershell
  • פקודות Exchange Powershell
  • איסוף מידע עם Powershell - חלק 1
  • זיהוי הזרקת Powershell - חלק 1

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

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