חזרה ליסודות: הבנת אובייקטים ב-PowerShell

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

PowerShell היא שפת אובייקטים ותסרוקת. זהו סוף דרך מהתסרוקות המסורתיות כמו cmd ו-Bash. התסרוקות מסורתיות אלו מתמקדות בטקסט, כלומר מחרוזות, ולמרות שהן עדיין שימושיות, הן מוגבלות ביכולותיהן. כמעט כל דבר ב-PowerShell הוא אובייקט.

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

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

אז התפקד! אתה הולך לחוות חוויית למידה שתעזור לך לשלט במושג של האובייקטים ב-PowerShell!

דרישות קדם

במאמר הזה, אתה הולך ללמוד על אובייקטים ב-PowerShell דרך גישה של ידי עשייה. אם תבחר לקבל חלק ולנסות את דוגמאות הקוד, PowerShell 5.1 או כל גרסה אחרת של PowerShell 6+ יעבדו. עם זאת, כל הדוגמאות שתראה יבוצעו על Windows 10 בנייה 1903 עם PowerShell 5.1.

הבנת מבנה של אובייקט

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

גילוי חברים של עצם עם Get-Member

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

כדי לגלות מידע אודות עצם (חברים), תוכל להשתמש בפקודה Get-Member. פקודת Get-Member היא פקודה מועילה המאפשרת לך למצוא פרופרטיז, שיטות וכו' זמינים לכל עצם ב-PowerShell.

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

language-powershell
Get-Service -ServiceName 'BITS' | Get-Member

תתרגל להשתמש בפקודת Get-Member. תשתמש בה הרבה במאמר זה.

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

סוגי עצמים ומחלקות

הכלי שלי אינו יכול להסביר את הטקסט המקורי שלך, אך הנה התרגום:

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

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

אובייקטים הם הופעות של מחלקות עם סוג ספציפי.

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

מאפיינים

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

אחת מהדרכים הקלות ביותר לגלות אילו מאפיינים קיימים באובייקטים היא באמצעות הפקודה Get-Member. תוכל לראות למטה שבאמצעות הפרמטר MemberType, Get-Member יגביל את הפלט המוחזר רק לאובייקטים. תראה גם שהוא מציג את סוג האובייקט System.ServiceProcess.ServiceController.

PS51> Get-Service | Get-Member -MemberType Property
Get-Service object properties

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

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

PS51> Get-Service -ServiceName 'BITS' | Select-Object -Property 'StartType'
BITS service start type

התכונות הן, ברוב המקרים, הרכיב הנפוץ ביותר של אובייקט שתעבוד איתו ב־PowerShell.

כינויים

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

תוכל לראות דוגמה לאובייקט עם כינויים באמצעות פקודת ה־Get-Service שוב כפי שמוצג למטה. התכונה Name כינוייתה ל־ServiceName ו־RequiredServices כינוייתה לתכונת ServicesDependedOn.

PS51> Get-Service | Get-Member -MemberType 'AliasProperty'
AliasProperty members on service objects

כאשר לתכונה יש כינוי, תוכל להתייחס לערך התכונה הזו באמצעות שמו הכינוי במקום שם התכונה האמיתי. בדוגמה זו, תכונה תיאורטית כמו Name ו־RequiredServices היא יותר אינטואיטיבית וקלה יותר להקליד מאשר ServiceName ו־ServicesDependedOn.

תוכל לראות דוגמה להתייחסות לכינויים אלו למטה.

# השתמש ב-AliasProperty במקום שם מאכלס אמיתי
PS51> $Svc = Get-Service -ServiceName 'BITS' # אובייקט שאתה עובד עליו
PS51> $Svc.Name
BITS
PS51> $Svc.RequiredServices

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

Properties on the BITS service object

שיטות

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

כדי להגביל את הפלט של Get-Member למתודות בלבד, הגדר את ערך הפרמטר MemberType ל־Method כפי שמוצג למטה.

PS51> Get-Service | Get-Member -MemberType 'Method'
Methods on service objects

כמתחיל, יש לך יש לך יש לך יש לך יש לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך לך

סוגים אחרים של חברים

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

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

  • נכסי סקריפט – משמשים לחישוב ערכי נכסים.
  • נכס הערה – משמשים לשמות נכסים סטטיים.
  • סטי המאפיינים – אלו דומים לכינויים שמכילים בדיוק את מה שהשם מרמז עליו; סטים של מאפיינים. לדוגמה, יצרת נכס מותאם אישית בשם Specs עבור פונקציית ה־Get-CompInfo שלך. Specs בעצם תת־סט של המאפיינים Cpu, Mem, Hdd, IP. המטרה העיקרית של סטי המאפיינים היא לספק שם יחיד של מאפיין לחבר קבוצת מאפיינים.

חשוב גם להזכיר את המושג של אירועי אובייקט. אירועים נמצאים מחוץ לטווח המאמר הזה.

עבודה עם אובייקטים ב־PowerShell

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

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

בוא נתחיל עם דוגמה של ספירת כל השירותים במחשב המקומי באמצעות הפקודה Get-Service כפי שמוצג למטה. אתה יכול לראות בפלט שמוחזר רבים שירותים שונים (אובייקטים).

PS51> Get-Service -ServiceName *
Using a wildcard on ServiceName parameter

שליטה במאפייני האובייקט המוחזר

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

הפקודה Select-Object "מסננת" מאפיינים שונים מהמוחזרים לצינור PowerShell. כדי ל"סנן" מאפייני אובייקט מהמוחזרים, תוכל להשתמש בפרמטר Property ולציין קבוצת מאפיינים מופרדת בפסיקים של אחד או יותר להחזרה.

ניתן לראות מטה דוגמה להחזרת מאפייני Status ו-DisplayName בלבד.

PS51> Get-Service -ServiceName * | Select-Object -Property 'Status','DisplayName'
Showing the Status and DisplayName properties

מיון אובייקטים

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

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

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

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

PS51> Get-Service -ServiceName * | Select-Object -Property 'Status','DisplayName' |
	Sort-Object -Property 'Status' -Descending
Using Sort-Object to sort service objects by Status in descending order

הצינור [ | ] ב-PowerShell הוא אחת מכמה טכניקות המשך שתשתמש בהן כאשר נדרש. השתמש בו במקום בסימן backticks.

עיבוד אובייקטים

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

. בעוד ש־Select-Object cmdlet מגביל את הפלט לתכונות מסוימות, ה־Where-Object cmdlet מגביל את הפלט של כל האובייקטים

. פקודת ה־Where-Object דומה ל־SQL WHERE clause. היא פועלת כסנן של המקור המקורי כך שתחזיר רק אובייקטים מסוימים שמתאימים לקריטריונים מסוימים

. אולי החלטת שאתה רוצה רק אובייקטים שמחזירים עם ערך של מאפיין Status שהוא Running ורק אלה עם ערך של מאפיין DisplayName שמתחיל ב־A

. ניתן לראות בקטע הקוד הבא שהוספנו ערך של Where-Object בין Select-Object ו־Sort-Object בסדר הצינור. באמצעות ערך של סקריפטבלוק עם תנאי חובה שנוצר עבור כל אובייקט לפגוש דרך הפרמטר FilterScript, ניתן ליצור כל סוג של שאילתה שתרצה

תבדוק את פקודת Format-Table אם תרצה לעצב איך הפלט יוחזר לקונסול.

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object -FilterScript {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending | Format-Table -AutoSize
Formatting object output

ספירת וממוצעת אובייקטים שמחזירים

הפקודה Get-Service מחזירה הרבה אובייקטים שונים. באמצעות פקודת Where-Object, סיננת חלק מהאובייקטים אבל כמה? בואו נכיר את פקודת Measure-Object.

פקודת Measure-Object היא פקודת PowerShell שבין היתר מבצעת פעולות מתמטיות, יכולה לספור כמה אובייקטים היא מקבלת דרך הצינור.

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

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending | Measure-Object

לאחר שהפקודות מסיימות לעבד, תראה, במקרה זה, שהיו קיימים 21 אובייקטים שהוחזרו בתחילה ונוצרו בעזרת פקודת Get-Service.

Finding the number of objects returned with Measure-Object

אולי אתה רוצה רק לקבל את מספר האובייקטים הכולל. מאחר שפקודת Measure-Object מחזירה את מספר האובייקטים הכולל דרך המאפיין Count, תוכל להתייחס שוב לפקודת Select-Object. אך הפעם, רק להחזיר את מאפיין Count.

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending |
			Measure-Object |
				# אנו מתחילים שוב, סינון ראשוני, עיצוב אחרון
				Select-Object -Property 'Count'
Only returning the count property

פעולה על אובייקטים עם לולאות

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

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

המשך שימוש בדוגמת Get-Service, אולי תרצה למצוא את כל השירותים במחשב עם שם שמתחיל ב-"Windows" ופועלים. באמצעות פקודת Where-Object, תוכל ליצור את התנאים כפי שעשית קודם.

Where-Object -FilterScript {$_.DisplayName -Like "Windows*" -and $_.Status -eq 'Running'}

אך כעת במקום להחזיר אובייקטים שלמים או כמה מאפיינים, תרצה להחזיר את המחרוזת <שם_השירות> פועל עבור כל אובייקט באמצעות הקוד **Write-Host -ForegroundColor 'Yellow' <שם_השירות> "פועל".

אתה כעת מניפה את הפלט ויצירת מחרוזת משלך. הדרך היחידה לעשות זאת היא להשתמש בפקודה ForEach-Object כפי שמוצג למטה. מתחת ניתן לראות ש-לכל אובייקט שמתקבל דרך Where-Object, PowerShell מריץ את הקוד Write-Host -ForegroundColor 'Yellow' $_.DisplayName "פועל".

PS51> Get-Service -ServiceName * |
	Where-Object {$_.DisplayName -Like "Windows*" -and $_.Status -eq 'Running'} | 
		Foreach-Object {
			Write-Host -ForegroundColor 'Yellow' $_.DisplayName "is running"
		}
Filtering by property with Where-Object

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

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

השוואת אובייקטים

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

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

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

$A = 'Svr01a.contoso.com'
$B = 'Svr02b.contoso.com'

$ProcA = Invoke-Command -Computername $A -Scriptblock {Get-Process -Name *}
$ProcB = Invoke-Command -ComputerName $B -Scriptblock {Get-Process -Name *}

עכשיו כל התוכניות בכל מחשב נלכדו במשתנים $ProcA ו- $ProcB. עכשיו עליך להשוות אותם. תוכל לעבור ידנית דרך כל סט של תוכניות או לעשות זאת בדרך הקלה יותר ולהשתמש ב- cmdlet בשם Compare-Object.

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

כדי להשתמש ב- Compare-Object, ציין את הפרמטרים ReferenceObject ו- DifferenceObject, ספק את כל אובייקט כערכי הפרמטרים כפי שמוצג למטה.

Compare-Object -ReferenceObject $ProcA -DifferenceObject $ProcB

באופן ברירת המחדל, Compare-Object יחזיר רק הבחנות באובייקטים שמסומנים על ידי המאפיין SideIndicator. הסמלים או סמני הצד המשמשים הם >, <, ו- = להצגת התאמה של אובייקטים שמתבצעת השוואה ביניהם.

Running Compare-Object

ניתן להשתמש בפרמטר המתג IncludeEqual עם Compare-Object כדי להחזיר מאפייני אובייקט שהם זהים. אם כן, תראה == כאינדיקטור צד. באופן דומה, ניתן להשתמש ב־ExcludeDifferent כדי להשאיר את ההבדלים.

הפקודה Compare-Object היא פקודה מאוד שימושית. אם ברצונך ללמוד עוד, הקפד לבקר ב־תיעוד האינטרנט.

עבודה עם אובייקטים מותאמים

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

יצירת אובייקטים מהטבלאות האש

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

בוא נתחיל על ידי יצירת אובייקט PowerShell מותאם אישית עם כמה מפתחות/ערכים באמצעות טבלאות האש. בדוגמה למטה, אתה יוצר טבלה אש. טבלה זו מייצגת אובייקט יחיד ואת המאפיינים שלו. לאחר שהטבלה האש $CarHashtable הוגדרה, אתה יכול להשתמש ב־PsCustomObject אקסלרטור סוג.

האצלת התאמה pscustomobject היא דרך מהירה ליצירת מופע של מחלקת pscustomobject. התנהגות זו נקראת קליטה.

בסיום קטע הקוד למטה, יש לך אובייקט ($CarObject) מסוג pscustomobject עם חמישה מאפיינים שהוקצו אליו.

## הגדר את הטבלה
$CarHashtable = @{
	Brand      = 'Ford'
	Style      = 'Truck'
	Model      = 'F-150'
	Color      = 'Red'
	Drivetrain = '4x4'
}

## צור אובייקט
$CarObject = [PsCustomObject]$CarHashTable

לעיתים קרובות, ניתן גם להשתמש ב־New-Object cmdlet. בשימוש באותה הטבלה, במקום להשתמש באצלת ה־pscustomobject, ניתן לעשות זאת בדרך הארוכה יותר עם New-Object. דוגמה לכך מוצגת למטה.

$CarHashtable = @{
	Brand      = 'Ford'
	Style      = 'Truck'
	Model      = 'F-150'
	Color      = 'Red'
	Drivetrain = '4x4'
}
# צור אובייקט
$CarObject = New-Object -TypeName PsObject -Properties $CarHashtable

כאשר נוצר $CarObject, ניתן כעת לראות למטה שניתן להפנות לכל אחד מהמאפיינים בדיוק כמו אם הם היו מתוך cmdlet פלטני ב־PowerShell כמו Get-Service.

Inspecting object properties

הוספת והסרת מאפיינים

לא רק ניתן ליצור אובייקטים מותאמים, אלא ניתן גם להוסיף אליהם. זכורים את Get-Member cmdlet? Get-Member יש לו דמות קרובה בשם Add-Member. ה־Add-Member cmdlet לא מפנה את המינים, הוא מוסיף אותם.

בשימוש באובייקט המותאם שנוצר מראש כדי דוגמה, אולי תרצה להוסיף מאפיין שנת היציבות לאותו אובייקט. ניתן לעשות זאת על ידי פיקוד של אובייקט ל־Add-Member ולציין:

  • הסוג של החבר (במקרה זה פשוט `NoteProperty`)
  • שם המאפיין (Year)
  • ערך המאפיין (Value)

ניתן לראות משלך מקרה מדגם למטה.

PS51> $CarObject | Add-Member -MemberType NoteProperty -Name 'Year' -Value '2010'

ניתן לראות מה שמופיע למעלה שזה נראה כמו כל מאפיין אחר.

Adding and viewing a new property

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

באותה קלות ניתן להסיר חבר מאובייקט. אף על פי שאין פקודת Remove-Member, עדיין ניתן לעשות זאת על ידי קריאה לשיטת Remove() על האובייקט כפי שמוצג למטה. תלמד על שיטות בקטע הבא.

PS51> $CarObject.psobject.properties.remove('Drivetrain')

מבוא מהיר לשיטות

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

שיטות מבצעות פעולה מסוימת. אובייקטים אחסון מידע בעוד שיטות מבצעות פעולה.

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

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

PS51> Get-Service -ServiceName 'BITS' | Stop-Service
PS51> Get-Service -ServiceName 'BITS'

במקום להפעיל את Get-Service פעמיים ולבצע פקודה נפרדת, Stop-Service, במקום זה, תוכל להשתמש בשיטות שנבנו ישירות לתוך אובייקטי השירות. הרבה אובייקטים יש להם שיטות. במקרה זה, Stop-Service וההתייחסות השנייה ל- Get-Service אף אינם נדרשים.

Running commands to stop and start a service

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

כדי לוודא שערך המאפיין Status מעודכן לאחר שהמצב של השירות שונה, תוכל לקרוא לשיטה Refresh() שפועלת כמו קריאה נוספת לפקודת Get-Service.

## עצירת BITS על המחשב המקומי
$Svc = Get-Service -ServiceName 'BITS' #האובייקט שאתה עובד עליו
$Svc.Stop() #השיטה / הפעולה שאתה מבצע
$Svc.Refresh() #השיטה / הפעולה שאתה מבצע
$Svc.Status #מאפיין

#התחלת BITS על המחשב המקומי
$Svc = Get-Service -ServiceName 'BITS' #האובייקט שאתה עובד עליו
$Svc.Start() #השיטה / הפעולה שאתה מבצע
$Svc.Refresh() #השיטה / הפעולה שאתה מבצע
$Svc.Status #מאפיין

תראה את הפלט הבא:

Executing methods on the service object

למידע נוסף על השיטות, ראה את נושא העזרה אודות_שיטות.

מסקנה

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

Source:
https://adamtheautomator.com/powershell-objects/