יום ראשון, 25 בנובמבר 2018

מדריך ל PowerShell בעברית חלק 2 - מיונים, מודלים ו-Alias.


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

אל תמשיכו לקרוא את החלק הזה של המאמר כל עוד לא עברתם על החלק הראשון - חלק ראשון


אז ללא יותר מדי חפירות, נתחיל.

מאמר זה שהוא החלק השני של המדריך,נלמד לבצע מיון לפלט, נלמד אודות מודלים, ה- PipeLine ומה הם Aliases ב-Power Shell.

ה - Power Shell – מצויין למיונים, אפשר לבצע סינון עד לרמת אובייקט, תתארו לעצמכם שבפקודה אחת אתם יכולים לשלוף Event מתוך רשימה של 200-לוגים וגם לקרוא את הכל באותו חלון של שורת הפקודה, ולכן אנחנו נלמד את האופרטורים (Operators) שהם לצורך סינון (Filter) ומיון, נעבור אל Pipeline מאפשר לנו לשרשר פקודות ממש כמו "פס יצור" שמריץ מוצרים וכל תחנה עושה בו שינוי כזה או אחר, וכמובן נלמד קצת על מודולים.


מיונים, מיונים, מיונים
1) Format-Table.

Format-table – היא, כשמה כן היא, פקודה שממיינת לכם את הפלט בצורת טבלה, אם אני מציג תוכן רב הייתי רוצה לראות אותו בצורה שאני אצליח לקרוא אותו, אז אני אצטרך להעביר את הפקודה דרך ה PipeLine (עליו נרחיב בפסקה יעודית לנושא בהמשך המאמר), לתוך format-table לדוגמא get-service |format-table ואם אני רוצה שהמערכת תתאים את התצוגה למסך שלי ותיתן לי לקרוא את הפלט בצורה נוחה יותר, אני יכול להוסיף בסוף את
הפרמטר “autosize-”

ללא פרמטר AutoSize:


עם פרמטר AutoSize:


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


2) Sort-Object.

Sort-object - מיון של אובייקטים לפי מצב או לפי עמודה (property) מסוים, לדוגמא, הריצו את הפקודה get-service, אתם תראו שתקבלו המון מידע, אבל מה קורה אם אני רוצה לראות את זה בצורה מסודרת, לפי מה פעיל ומה לא פעיל?





3) Group-Object

Group-object – ניתן לקבל פלט ולמיין את הפלט לפי קבוצה, לדוגמא נמיין את הסרוויסים שלנו לפי סטטוס בלבד: Get-Service|Group-Object -Property Status


4) Where-object.

Where-Object  - מדובר במסננת לכל היותר, בעזרת הפקודה הזאת אפשר לבצע סינון של Property שמתקבלים מתוך הפייפליין (אנחנו נלמד עליו בפיסקה הבאה).
Where-object הינה פקודת סינון תוצאות או תצוגה (תקראו לזה איך שנוח לכם, העיקר שתזכרו את זה), לצורך דוגמא נריץ את הפקודה get-hotfix (פקודה שמציגה לנו עדכוני מערכת, כרגע לא משנה הסדר שבו זה יוצג או האם זה רלוונטי או לא) כמובן שנקבל המון מידע:


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

נתחיל עם הדרך הפשוטה: *Get-hotfix |where-object hotfixid –like kb44

הפרוש של הפקודה היא "הצג לי את כל עדכוני המערכת שמתחילים ב Kb44" ובהתאם לכך בעצם גם התוצאה:


עוד דוגמא ל where-object:

נגיד ואנחנו רוצים לראות את הפרוססים שרצים לנו במערכת, נריץ את הפקודה get-process וכמובן שנקבל המון מידע, לדוגמא:

ואני מעוניין לראות נגיד רק את הפרוססים של הכרום:
'*Get-process | where-object Processname –like '*chrome

                   • חשוב לזכור, את הסינון ניתן לעשות לפי כל עמודה שמופיעה, כמו כן, ישנן עמודות גם שלא מופיעות על מנת שנוכל לראות עד אפשרויות לסינון, נריץ את get-process דרך Get-member  ואז נוכל לראות לפי אילו עוד אפשרויות ניתן לבצע סינון, מאחר והרשימה היא מאוד ארוכה (ניתן לראות  Property וגם Methods שניתן להשתמש בהן) אני לא אצלם כאן את המסך, עדיף שתנסו לבד.

                    • עוד טריק שמראה עד כמה בנו את ה Power Shell בצורה חכמה, לאחר שהקלדתםWhere-object אם תתחילו ללחוץ על TAB תקבלו את אפשרויות שלפיהן אפשר יהיה לסנן – מאוד נוח כשלא בטוחים.לאחר שהרצנו את הפקודה, נקבל רשימה של כל הפרוססים שהם כרום:



ישנן כמה דרכים להשתמש בפקודה where-object, האחת היא הפשוטה (יותר ברורה לאדם) והשניה היא יותר מסובכת אבל כעקרון יותר "אפקטיבית" למחשב ומאפשר לשרשר פקודות בצורה יותר טובה, איתה גם ניתן לשרשר פקודות בצורה יותר יעילה:
{'*Get-process | where-object –filterscript {$_.processname –like '*chrome

הסימן "_$" - מיצג כל אובייקט בתורו, זאת אומר מאחר ואנחנו מריצים פקודה שתיתן לנו רשימה של מלא פרוססים, אז אנחנו רוצים להעביר בתוך הפקודה שלנו כל פרוסס בתורו, ניתן לרשום גם PSItem$ ונקבל את אותה התוצאה זאת אומרת הפקודה תראה כך:

{'*Get-process | where-object –filterscript {$PSitem.processname –like '*chrome

במקרה זה נקבל את אותה התגובה מהמחשב.

לידע כללי:
להמון פקודות ב – PowerShell יש אליאס (כינוי) שניתן לרשום בצורה שונה, בשביל שנוכל לראות את כל ה Alias שיש ל Power Shell להציע, נריץ את הפקודה get-alias, כמובן שנקבל פלט ענק ששם נוכל לראות את כל הרשימה, במקרה של where-object נקבל 2 קיצורים לפקודה, האחד where והשני "?" 
(בהמשך המאמר ישנו הסבר קצת יותר מפורט על Aliases)



זאת אומרת את הפקודה היותר פקודה של where-object אפשר יהיה לכתוב בצורה הזאת:
get-process |? Processname –like '*chrome*'

ונקבל את אותו הפלט:


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

ישנן המון אפשרויות לסינון, המסננים נקראים Comparison Operators, ניתן לקרוא עליהם ברשת ובחיפוש ב Power Shell, עדיף כמובן ברשת על ידי ביצור חיפוש של
About Comparison Operators.



"הצינור" – PipeLine

לא אני לא עושה שום פרסומת לתוכנית בערוץ 10, למי שיצא לעבוד עם Linux מכיר את ה" PipeLine" טוב מאוד, הסימון שלו הוא "|" והוא נמצא בדרך כלל מעל מקש ה  Enter אצלכם, אם תלחצו על Shift ועל המקש הזה תקבלו את ה"PipeLine", בגדול מה שזה מאפשר לעשות הוא לשרשר פקודות, זאת אומרת אם אני רוצה לדוגמא לראות אילו עמודות אני יכול לראות כשאני מריץ את get-process, אני "אעביר" אותו דרך "צינור" לפקודת ה get-member  ואז אוכל לראות את כל הפעולות שאני יכול לעשות עם האובייקטים שיוצגו, כולל עמודות (Property) שאני יכול להציג, ו"Methods" (נלמד עליהם בהמשך) וכמובן גם ה Aliases המתאימים.
 
הפקודה נראית כך
get-process |get-member

מאחר והפלט הוא מאוד ארוך, אציג כאן רק חלק

משימה שניה: נסו לחשוב על פקודות שיכולות להציג לכם פלט עם הרבה מידע ורשימות כמו רשימת ה – Process ורשימת ה-Services והעבירו אותם דרך ה-Pipeline לפקודה format-table –autosize.

לדוגמא, פקודה להצגת עדכוני מערכת, אני ארצה להציג אותם בצורה של טבלה ובשביל לראות את הכל בצורה שמתאימה
למסך שלי, אני גם ארצה שה  Power Shell יתאים את זה לתצוגה שלי:
בשביל להציג עדכוני מערכת נשתמש  ב-CmdLet   שנקרא get-hotfix וכפי שנתנו דוגמא במשימה, נשתמש ב CmdLet שנקרא format-table ונגיד לו תתאים לבד את התצוגה בעזרת הפרמטר "-autosize"

מבנה הפקודה: get-hotfix –computername localhost|format-table –autosize



Alias 
כן, גם כאן יש לנו Alias (כינוי) שבעצם אפשר להשתמש בו לדוגמא, אם אני רוצה לעשות העתקה של קובץ אז אני יכול להשתמש ב Cmdlet "copy-item" אבל אני יכול להשתמש גם ב"cp" (השתמשתם ב –Linux פעם? אז כן, זה אותו הדבר כמו שם) אם תרצו לראות את כל ה-Aliases תוכלו להריץ את הפקודה Get-alias (לא משנה אם זה באותיות גדולות או קטנות) ותקבלו רשימה של כל ה Aliases שיש ב  Power shell בהתאם ל Module שמותקים אצלכם ב  Power Shell.

אם אני רוצה לסנן ולראות את כל פקודות ה-Get, אני יכול להריץ get-alias g* ואז אקבל את כל הפקודות שמתחילות ב Get שזה בעצם כל ה-CmdLets.

אם אני רוצה לקבל קיצור של איזושהי פקודה אני יכול להריץ get-alias -definition get-process  ואז אקבל בדיוק את המידע שאני צריך, כמו כאן בדוגמא, רציתי לברר מה ה- Alias של get-process אז אני בעצם "שואל" את ה Power Shell והינה הפלט:


במידה ואני רוצה לקבל Alias של פרמטר מסויים (נגיד ואני רוצה לדעת מה הקיצורים של כל הפרמטרים של הפקודה Get-process), אני אריץ את הפקודה הבאה:

(Get-Command Get-Process).Parameters.Values| Where-Object aliases |Select-Object name,aliases

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


Modules

מודלים הם בעצם "תוספים" שמאפשרים לכם לעבוד עם Power Shell בהתאם למה שאתם מעוניינים לעשות, כל Module מוסיף רשימה של פקודות ופונקציות כאלה ואחרות, לדוגמא בשביל לנהל את 
ה- Active Directory דרך Power Shell, נצטרך מודול שנקרא Active Directory Module שיהיה מותקן לכם כחלק מ RSAT או שכמובן יהיה מותקן על שרת ה DC עצמו.

בשביל לראות אילו מודלים מותקנים לנו ב Power Shell נריץ את הפקודה:

Get-Module –ListAvailable

תיקחו בחשבון שתקבלו רשימה מאוד ארוכה כמובן, מכיוון שישנם הרבה מודולים שמותקנים אצלכם

לאחר שהרצתי את הפקודה על שרת ה DC שלי להלן הפלט:



כפי שניתן לראות, מודול ה Active Directory מותקן על שרת ה DC מה שיאפשר לי לנהל אותו משורת הפקודה.

שימו לב - גירסה יותר עדכנית, תביא איתה יותר פקודות

ב Power shell האחרון שהוא בגירסה 5.1 ישנו סט מאוד גדול של פקודות שנוסף מאז הגירסה הראשונה ולכן כדי לעדכן לגירסה האחרונה (בשביל לבדוק את הגירסה המותקנת אצלכם, הריצו את הפקודה: host
להלן הפלט :



ניתן לעדכן לגרסת ה- Power Shell מהאתר הרשמי של מיקרוסופט: PowerShell 5.1

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


עד כאן להפעם.

לצערי הרב לא ממש יוצא לי ליצור סרטוני יוטיוב, אבל אני עדיין זמין לשאלות במייל שלי :
levl@leidertech.co.il