Cmdlet Get-Process ב-PowerShell לתהליכים בריצה

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

במאמר זה, תלמד כיצד להשתמש ב־Get-Process cmdlet של PowerShell דרך דוגמאות ממשיות. אם להפעיל תוכניות כדי לשלוט בהן ב-Windows או Linux נשמע כמו כיף, אז המשך לקרוא!

נוגע ל: איך להרוג תוכנית ב-Linux באמצעות ps, pgrep, pkill ועוד!

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

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

  • אף על פי ש־Windows PowerShell 5.1 מספיק לרוב הדוגמאות כאן, PowerShell 7.1 ומעלה הוא נדרש לתמיכה ב-Linux.

נוגע ל: שדרוג ל-PowerShell 7: מדריך עקבות

  • מאמר זה משתמש ב־Windows 10 ו-Ubuntu 20.04 LTS, אך כל מערכת הפעלה שבה PowerShell רץ יעבוד.

מוכן? בוא נכנס וננהל כמה תוכניות!

הצגת תהליכים רצים

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

Get-Process מחזיר צילום נקודתי של מידע על התהליכים הפעילים במערכת. כדי להציג מידע בזמן אמת על התהליכים, Windows מציעה את מanager משימות של Windows ו־Linux מציעה את הפקודה top.

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

Using the Get-Process cmdlet on Windows to display local processes.

לפי ברירת מחדל, הפקודות gps או ps קיימות כשמות חיפוש ל־Get-Process. כ־PowerShell 7 היא פלטפורמה חצי־צולבת, הפקודה ps מתקרעת עם פקודה מובנית של Linux. לכן, ps לא יעבוד ב־Linux, רק החיפוש gps.

המשמעות של פלט Get-Process לא תמיד יכולה להיות ברורה מיד. מאפייני Get-Process הברירת מחדל מתוארים בפרטים נוספים למטה.

  • NPM(K) – כמות הזיכרון שאינו דפוף שהתהליך משתמש בו, מוצגת בקילובייטים, כפי שמורגש בהערה (K).
  • PM(M) – הכמות של זיכרון הניתן לדף שתהליך משתמש בו, מוצגת במגה-בייטים, כפי שמוצג על ידי הסימון (M).
  • WS(M) – גודל הסט הפעיל של התהליך, מוצג במגה-בייטים. הסט הפעיל כולל את העמודים בזיכרון שהוזכרו לאחרונה על ידי התהליך.
  • VM(M) – כמות הזיכרון הווירטואלי שהתהליך משתמש בו, מוצגת במגה-בייטים. כולל אחסון בקבצי הדף על הדיסק.
  • CPU(S) – הכמות של זמן המעבד שהתהליך השתמש בו על כל התהליכים, מוצגת בשניים.
  • Id – מזהה התהליך (PID) של התהליך.
  • SI – זיהוי סשן של התהליך הרץ. סשן 0 מציין שהתהליך זמין לכל המשתמשים, 1 מציין שהתהליך קיים תחת המשתמש הראשון שנכנס, וכן הלאה.
  • ProcessName – שם התהליך הרץ.

כדי להציג רשימה של כינויי מאפיינים ממופים לשמות מלאים של מאפיינים, השתמשו בפקודה Get-Process | Get-Member -MemberType 'AliasProperty'.

להלן דוגמה נוספת נהדרת. עבור כל הופעה של תהליך brave שהוא מוצא, הוא משתמש במזהה התהליך שלו ($_.id) ומעביר אותו ל־Get-NetTCPConnection. PowerShell אז משתמש ב־Get-NetTCPConnection כדי למצוא מידע על כל חיבור רשת של תהליך brave שפתח.

הרץ את הקוד הבא בסשן של PowerShell כאשר הדפדפן Brave רץ.

Get-Process -Name brave | ForEach-Object { Get-NetTCPConnection -OwningProcess $_.Id -ErrorAction SilentlyContinue } 

תודה ל־Jay Adams מ־SystemFrontier!

מזל טוב, כעת תוכל לראות את כל התוכניות הרצות במערכות Windows ו-Linux באמצעות Get-Process!

מציאת תכונות ספציפיות של תהליכים

Get-Process מחזיר רבות מאוד מאפיינים שונים של תהליכים בהתאם למה שראינו קודם לכן. כמו כל אובייקט אחר ב־PowerShell, ניתן לבחור באופציה לראות רק מאפיינים מסוימים באובייקטים.

בוא נעבור על דוגמה פשוטה של איך ניתן לשלוף מאפיינים ספציפיים עבור תהליך מסוים:

  1. הפעל את מחשבון Windows שלך.

2. עם חלון פקודות של PowerShell פתוח, הפעל את Get-Process באמצעות הפרמטר Name כדי להציג רק את כל התהליכים הרצים עם Calculator כשם. תראה את הפלט שראית קודם לכן.

Get-Process -Name 'Calculator'

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

(Get-Process -Name 'Calculator').CPU

שים לב ש־Get-Process מחזיר שם בשם CPU(s), והקטע שלעיל משתמש בשם רק CPU. לפעמים PowerShell אינו מציג את שם המאפיין האמיתי בפלט. המושג הזה מתבצע עם קובץ העיצוב PS1XML.

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

$cpu = (Get-Process -Name 'Calculator').CPU
[math]::Round($cpu,2)
Calculator process is using less than 1 second of CPU time across all cores.

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

השאר את יישום המחשבון רץ. תשתמש ביישום זה לשאר הדוגמאות.

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

איתור חשיבות בקרים במערכות שרצות לאט יכול להיות אתגר, וזיכרון מוגבל היא לעיתים גורם. בהמשך עם יישום המחשבון, אחזור על התהליך של Calculator והצג רק את המאפיין VM. כפי שמוצג למטה, הזיכרון המשתמש מוצג במגה-בייטים (MB).

(Get-Process -Name 'Calculator').VM
Displaying the Calculator process memory usage.

לעזור להבין את שימוש הזיכרון, השתמשו במכפילים המובנים של PowerShell כדי לשנות מגה-בתים (MB) לגיגה-בתים (GB). בדוגמה למטה, תמיד המרת הזיכרון המשומש ל-GB ואז השתמשו בשיטת העגלה של ספריית המתמטיקה של .NET Round כפי שנראה בתמונת המסך למטה.

$ProcessMemoryGB = (Get-Process -Name 'Calculator').VM
$ProcessMemoryGB / 1GB


# השתמשו בסוג המתמטיקה של .NET בשיטת העגלה Round

[Math]::Round($ProcessMemoryGB / 1GB)

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

Converting the calculator process memory usage to a rounded GB format.

חשיפת תכונות שמעט ידועות

לא כל התכונות כלולות או מוצגות כברירת מחדל עם Get-Process. קראו למטה כדי ללמוד עוד על התכונות Path ו־UserName וכיצד להשתמש בהן!

גילוי המקום שבו קובץ התהליך קיים

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

(Get-Process -Name 'Calculator').Path
Using Get-Process to display a process’s full file system path on Windows.

כמו ב-Windows, Get-Process ב-Linux גם מחזיר את נתיב מערכת הקבצים. בדוגמה שלמטה, התהליך gnome-calculator רץ עם הנתיב המוצג בפלט הקונסולה.

(Get-Process -Name 'gnome-calculator').Path
Using Powershell Get-Process to display a process’s full file system path on Linux.

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

מציאת בעל התהליך

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

Get-Process -Name 'Calculator' -IncludeUserName
Displaying the owner of Calculator process on Windows.

לבסוף, קרא כדי ללמוד על שימוש ב-Get-Process במחשב מרוחק כדי לקבל מידע על התהליכים!

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

אף על פי שב-Windows PowerShell, Get-Process אין לו יכולות מרוחקות בעצמו, תמיד ניתן להשתמש ב-PowerShell Remoting וב-Invoke-Command כדי להריץ אותו על מחשבים מרוחקים.

קשור: איך להגדיר PSRemoting עם Windows ולינוקס

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

Get-Process -ComputerName 'remote_computer_name' -ProcessName 'process'

הפרמטר -ComputerName הוסר ב- PowerShell 7.x מאחר וה- cmdlet לא קשור ישירות ל- remoting. כדי להשיג את אותו התוצאה, תוכל לארוז אותו ב- Invoke-Command, כך: Invoke-Command -ComputerName "ComputerName" -ScriptBlock { Get-Process -ProcessName 'process' }

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

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

Computer and Getting Running Processes

תוכל ליעד מחשבים מרובים על ידי פרידה בפסיקים, לדוגמה: Get-Process -ComputerName SRV1,SRV2.

שלבים הבאים

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

עכשיו, מה תעשה עם הידע הזה? נסה להעביר תהליך שנלקח על ידי Get-Process ל- Stop-Process במחשב מקומי או מרוחק כדי לסיים אותו!

Source:
https://adamtheautomator.com/powershell-get-process/