כיצד להשתמש בפקודת PowerShell Expand Property עבור Select-Object

**שימוש ב-Select-Object ב-PowerShell**

ה-Select-Object בפוורשל הוא פקודה המאפשרת לך לבחור אובייקטים ומאפיינים מתוך קבוצת אובייקטים נתונה. אך לפעמים יש צורך לדעת עוד. ה-ExpandProperty הוא מתג עבור Select-Object שמרחיב פרטים על מאפיין מסויים.

גלה את העוזר שב-Expand Property של PowerShell (-ExpandProperty) במדריך זה המבוסס על דוגמאות.

**דרישות מוקדמות

**
מדובר בהדגמה פעולה. אם ברצונך למעשה לעקוב, כל שצריך הוא מחשב עם PowerShell 5.1 ומעלה. המאמר משתמש במחשב עם Windows 10 ופוורשל 5.1.

חליצת ערכי אובייקט מאפיין באמצעות PowerShell Expand Property

התחבר למחשב שלך ב-Windows והפעל את תרמינל ה-PowerShell. במקטע זה, תתמקד בפקודה Select-Object ובמפתח ה-ExpandProperty.

1. הפעל את פקודת Get-Service כדי לקבל רשימה של כל השירותים במערכת שלך. עבור את הפלט לפקודת Select-Object כדי לבחור ולהציג רק את מאפיין השם של כל אובייקט שירות, כפי שמוצג למטה.

Get-Service | Select-Object -Property Name

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

Selecting the names of the existing system services

2. הפעל את הפקודה Get-Member בסיום קו הפקודה הקודם של צינור כדי לאמת את סוג האובייקטים ש-Select-Object מחזירה כפי שמוצג למטה. הידע על סוג האובייקט יכול לסייע בכתיבת פונקציות או פקודות כדי להרחיב על הצינורות שלך.

Get-Service | Select-Object -Property Name | Get-Member

הפנה לתמונה למטה, ותשים לב שאף שהמפתח -Property מפיק את מה שנראה כרשימה של מחרוזות, אלו הם הרשימה שנבחרה של אובייקטים System.ServiceProcess.ServiceController.

Viewing the type of a ServiceController object with Get-Member

3. החלף את הפקודה Get-Members ב-pipeline כך שתשתמש ב-mkdir כדי ליצור באופן אוטומטי תיקייה לכל שירות. המפתח -first 5 מגביל את מספר האובייקטים שיחזרו. בתור כך, פונקציית mkdir תיצור רק חמישה תיקיות בהתאם לאובייקטים בצינור.

Get-Service | Select-Object -Property Name -First 5 | mkdir

אתה אמור לראות פלט דומה לתמונה למטה, המציינת ניסיון הצלחה.

Creating a folder for the services on your system

4. הסר את התיקיות על ידי החלפת mkdir ב-rmdir כפי שמוצג בקטע למטה. הדלק את המפתח -Verbose כדי להציג פלט מפורט בטרמינל שלך.

Get-Service | Select-Object -Property Name -First 5 | rmdir -Verbose

ה- cmdlet של rmdir מצפה למחרוזות ואינו יכול להתמודד עם הייצוג של עצמות ServiceController כמו ב־hashtable. הניסיון שלך צפוי לנכשל עם מספר שגיאות, כמו שמוצג בתמונה למטה.

Demonstrating that some cmdlets expect string values instead of hashtables

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

Get-Service | Select-Object -ExpandProperty Name -First 5 | rmdir -Verbose

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

Deleting folders named after the services expanded

יצירת סט של עצמים נבחרים עם מאפיינים מסוימים

כדי לקצר את קטעי הקוד במקטעים, צור משתנה עבור השירותים הראשונים במכונה שלך כך:

הרץ את הפקודה Get-Service, בחר בעצמים הראשונים 20 באמצעות ה-cmdlet Select-Object, ואחסן את העצמים במשתנה בשם $testServices. בחר רק במאפיינים Name, Status, ו־DependentServices כך:

$testServices = Get-Service | Select-Object -Property Name,Status,DependentServices -First 20

מתג ה-Expand Property של PowerShell יכול להרחיב רק מאפיין אחד בכל פעם, להבחין ממתג ה-Property שיכול לבחור יותר ממאפיין אחד בו זמנית.

הרץ את שם המשתנה, `$testServices`, כדי להציג את מבנה התוכן שלו.

$testServices

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

Displaying the contents of $testServices

הרחבת מאפיין אוסף עם PowerShell Expand Property

A PowerShell object can have properties that are collections of objects, also known as collection properties. In this section, you will learn how to use PowerShell Expand Property to expand a collection property to view its members’ properties.

הרץ את ה־cmdlet Select-Object על המשתנה $testServices והרחב את המאפיין DependentServices של כל שירות.

$testServices | Select-Object -ExpandProperty DependentServices

מאחר ש־DependentServices הוא מאפיין של אוסף, הפלט הוא רשימה של השירותים בכל האוספים המומלאים, כפי שמוצג למטה. שים לב לכפילויות ברשימה עקב שילוב תוצאות מהמאפיין המורחב DependentServices.

Expanding the DependentServices property

שילוב מאפיין עם PowerShell Expand Property לפלט מסויים

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

הרץ את הפקודה למיפוי המאפיינים של DependentServices לפי Name.

$testServices | Select-Object -ExpandProperty DependentServices -Property Name

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

השגיאה למעלה מסבירה לך שהרשימה הראשית של השירותים (ב־$testServices) כבר מכילה מאפיין Name המתנגש עם מאפיין Name במאפיין המורחב DependentServices.

Attempting to group an expanded property by the parent object name

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

שמור את פלט הפקודה הקודם ששונה כדי לציין תכונה מחושבת בשם Depends On כתכונת המזהה במשתנה בשם $depServ. Depends On יכיל את ערך השם עבור כל שירות ב-$testService.

שם התכונה, Depends on, נבחר באופן שרירותי במדריך זה ויכול להיות כל ביטוי לבחירתך.

$depServ = $testServices | Select-Object -ExpandProperty DependentServices -Property @{name="Depends On"; expr={$_.Name}}

העבר את האובייקט ב-$depServ דרך Select-Object כדי לבחור את תכונות השירות התלויות Name, Status, ו-Depends On.

$depServ | Select-Object -Property Name,Status,"Depends On"

כעת אתה יכול לדעת אילו שירותים תלויים בשירותים ב-$testServices, כפי שמוצג למטה.

Grouping an expanded property using a calculated property

שילוב Format-List עם PowerShell Expand Property לשם פרטנות

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

הפעל את הפקודה Get-Process למטה כדי לאחזר את כל ה-modules שהתהליך explorer משתמש בהם. הפעל את המתג -ExpandProperty כדי להציג את תכונות המודולים.

Get-Process explorer | select-object -ExpandProperty Modules

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

Viewing the truncated output of an expanded property

העבירו את האובייקטים ל- cmdlet של Format-List כדי להציג את כל הערכים עבור אובייקטי המודול ברשימה נוחה יותר.

Get-Process explorer | select-object -ExpandProperty Modules | Format-List

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

Converting the output of an expanded property to a list with Format-List

מסקנה

על ידי הצלחה להגיע עד כאן, ראיתם איך להרוויח מהמתג הרחב תכונה (-ExpandProperty) של ה-cmdlet של Select-Object. PowerShell מציעה מגוון של cmdlets שימושיים למשימות נפוצות רבות. תוכלו להעשיר את הידע החדש שלכם על ידי למידה איך להציג קבצים במהירות עם PowerShell Cat.

Source:
https://adamtheautomator.com/powershell-expand-property/