חנון בית הספר עבודה עם אוספים ב PowerShell
מאז PowerShell מבוססת על. NET Framework ומשלבת טכנולוגיות שונות אחרות כמו WMI ו CIM, תמיד יש יותר מדרך אחת להשיג את אותו הדבר. בואו להצטרף אלינו עבור פוסט קצר זה שבו אנו לומדים כיצד לבחור את השיטה הטובה ביותר לבצע את המשימות שלנו.
הקפד לקרוא את המאמרים הקודמים בסדרה:
- למד כיצד להפוך את Windows עם PowerShell
- ללמוד להשתמש Cmdlets ב PowerShell
- ללמוד כיצד להשתמש אובייקטים ב PowerShell
- הלמידה עיצוב, סינון והשוואה ב PowerShell
- למד להשתמש Remoting ב PowerShell
- באמצעות PowerShell כדי לקבל מידע על המחשב
ו להישאר מכוון עבור שאר הסדרה כל השבוע.
באמצעות אצווה Cmdlets
מוקדם יותר בסדרה, כאשר הצגנו אותך אל הצינור, הראינו לך איך אתה יכול לקחת את האובייקטים כי יציאות cmdlet אחד ולהעביר אותם כקלט ל- cmdlet אחרת באמצעות משהו כזה:
Get-Process-Name Notepad עצור תהליך
זה יהרוג כל תהליך עם השם "פנקס". אבל אתה בטח תוהה איך PowerShell הוא מסוגל להרוג כל מקרה של פנקס עם פקודה אחת. התשובה טמונה בעזרה של cmdlet עצור תהליך.
עזרה עצור תהליך מלא
אם אתה מסתכל על שורת הקוד האחרונה בקטע התחביר, אתה יכול לראות שהפרמטר InputObject מקבל אובייקט מסוג Process [], ובכל פעם שאתה רואה סוג ואחריו שתי סוגריים מרובעים ככה זה אומר שהפרמטר מקבל אחד או יותר מהסוג הקודם. במקרה זה, הוא מקבל אובייקט תהליך אחד או יותר. מבחינה טכנית, היינו אומרים כי cmputlet InputObject מקבלת תהליך מערך. בכל פעם שיש לך cmdlet התומך פעולות אצווה בצורה זו, להשתמש בו. זוהי בחירה מספר אחת.
באמצעות WMI
למרות WMI היא לא היצירה הטובה ביותר של הטכנולוגיה הספינה מן מיקרוסופט HQ, היא אכן מגיעה ב השני ברשימה של איך לעבוד עם אוספים של אובייקטים. אנחנו יכולים בקלות לקבל רשימה של תהליכים רצים מהמחלקה Win32_Process כך:
Get-WmiObject -Class Win32_Process
מאז שאילתת WMI מחזירה את האובייקט שלה סוג של, תצטרך לחפש שיטה שיכולה לעצור את התהליך, אז מאפשר צינור זה כדי לקבל חבר.
Get-WmiObject -Class Win32_Process | קבל חבר
נראה כאילו הדבר הקרוב ביותר הוא להפסיק את שיטת הסיום, כך זה חייב להיות אחד. כדי להתקשר לשיטה על אובייקט WMI, אתה פשוט צינור זה Invoke-WmiMethod ולציין את שם השיטה.
Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe' '| הפעל- WmiMethod -Name לסיים
נהדר, זה עשה את הטריק. בכל פעם שאתה מקבל ReturnValue של 0 ב WMI, רק לזכור כי הפקודה בוצעה בהצלחה.
ספירה
כשלון בשתי שיטות אחרות, אם אתה צריך לעשות משהו לחבורה של אובייקטים אתה יכול למנות את האובייקט כולו ולפעול על כל אובייקט בודד. ראשית עליך למצוא את השיטה שבה היית משתמש כדי לעצור תהליך יחיד.
קבל תהליך | Get-Member -MemberType שיטה
מושלם, זה נראה כאילו אנחנו יכולים להשתמש בשיטת להרוג ולאחר מכן צינור לתוך ForEach- אובייקט להרוג את כולם.
Get-Process-Name Notepad ForEach-Object -Process $ _. Kill ()
כאן לקחנו את כל האובייקטים התהליך כי Get-Process חזר והעביר אותם cmdlet ForEach-Object. בדומה לאובייקט ה- cmdlet של האובייקט, ייצגנו כל אובייקט בצינור עם $ _ אשר הצלחנו לקרוא לשיטת ה- Kill (). עם כל מה שנעשה, ספירת אוסף הוא הרבה יותר לאט מאשר את השיטות לעיל ויש להשתמש רק כתוצאה האחרונה.
סיכום
בחירה אחת
Get-Process-Name Notepad עצור תהליך
בחירה שתיים
Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe' '| הפעל- WmiMethod -Name לסיים
בחירה שלישית
Get-Process-Name Notepad ForEach-Object -Process $ _. Kill ()
זה הכל עבור אנשים הפעם, לראות אותך בשבוע הבא בשביל יותר כיף PowerShell.