الأوامر الساخنة لـ PowerShell Get-Process لتشغيل العمليات

مهتم ب استخدام cmdlet PowerShell Get-Process لعرض عمليات تشغيل النظام؟ مع Get-Process يمكنك العثور على مالك العملية، وهوية العملية، أو حتى موقع العملية على القرص.

في هذا المقال، ستتعلم كيفية استخدام cmdlet Get-Process في PowerShell من خلال أمثلة من الحياة الواقعية. إذا كان التلاعب بالعمليات لثنيها على إرادتك على نظام التشغيل Windows أو Linux يبدو ممتعًا، فما عليك سوى الاستمرار في القراءة!

ذات صلة: كيفية إنهاء عملية في Linux باستخدام ps، pgrep، pkill وغيرها!

المتطلبات المسبقة

قبل المتابعة، فيما يلي المتطلبات المسبقة الضرورية لمتابعة الأمثلة في هذا المقال.

  • على الرغم من أن PowerShell 5.1 لنظام التشغيل Windows يكفي لمعظم الأمثلة هنا، إلا أنه من الضروري الحصول على PowerShell 7.1 والأحدث لدعم Linux.

ذات صلة: الترقية إلى PowerShell 7: دليل تعليمي

  • يستخدم هذا المقال نظام التشغيل Windows 10 و Ubuntu 20.04 LTS، ولكن أي نظام تشغيل يعمل عليه PowerShell سيعمل.

هل أنت جاهز؟ لنقم بإدارة بعض العمليات!

عرض عمليات التشغيل

Get-Process يدير العمليات المحلية. في هذا المثال الأول، تستخدم أمر PowerShell Get-Process cmdlet. يعرض هذا الأمر جميع العمليات الجارية.

Get-Process يعيد لقطة في وقت معين من معلومات تشغيل العملية في النظام. لعرض معلومات العملية في الوقت الحقيقي، يقدم نظام 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) – كمية وقت المعالجة التي استخدمتها العملية على جميع العمليات، معروضة بالثواني.
  • المعرف – معرف العملية (PID) للعملية.
  • SI – معرف الجلسة للعملية الجارية. الجلسة 0 تشير إلى أن العملية متاحة لجميع المستخدمين، 1 تشير إلى أن العملية موجودة تحت المستخدم الأول المسجل الذي يستخدم الجهاز، وهكذا.
  • اسم العملية – اسم العملية الجارية.

لعرض قائمة من الأوامر البديلة المرتبطة بأسماء الخاصيات الكاملة، استخدم الأمر 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.

يتم التعبير عن وقت وحدة المعالجة المركزية كمجموع للثواني عبر النوى. للحصول على رقم يمكن قراءته بشكل أفضل من قبل الإنسان، قم بتقريبه إلى العشرة الأقرب باستخدام طريقة 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 مفتوحًا. ستستخدم هذا التطبيق لبقية الأمثلة.

استرجاع استخدام ذاكرة العملية

قد يكون تحديًا حل مشكلات أنظمة التشغيل البطيء، حيث يكون الذاكرة المقيدة في كثير من الأحيان سببًا. واستمرارًا في تطبيق Calculator، استرجع عملية 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 على جهاز كمبيوتر بعيد لاسترجاع معلومات العملية!

البحث عن العمليات على أجهزة الكمبيوتر البعيدة

على الرغم من أن أمر Get-Process في PowerShell لنظام التشغيل Windows لا يحتوي على إمكانيات بعيدة في حد ذاته، يمكنك دائمًا الاعتماد على PowerShell Remoting و Invoke-Command لتشغيله على أجهزة الكمبيوتر البعيدة.

ذات الصلة: كيفية إعداد PSRemoting مع Windows و Linux

لكن، إذا كنت تستخدم نظام Linux أو تعمل بنظام PowerShell 6 على نظام Windows، فلديك الآن معلمة ComputerName يمكنك استخدامها لاستعلام العمليات على أجهزة الكمبيوتر عن بعد.

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

تمت إزالة المعلمة -ComputerName في PowerShell 7.x حيث أن الأمر ليس متعلقًا مباشرة بالتحكم عن بعد. لتحقيق نفس الغرض، يمكنك تغليف الأمر نفسه في Invoke-Command، كما فيما يلي: Invoke-Command -ComputerName "اسم الكمبيوتر" -ScriptBlock { Get-Process -ProcessName 'العملية' }

عند تشغيل الأمر أعلاه ضد كمبيوتر بعيد، يتم عرض نفس الناتج كما لو تم تشغيل أمر Get-Process محليًا.

أدناه مثال على التحكم عن بعد إلى كمبيوتر آخر والحصول على العمليات التي تعمل:

Computer and Getting Running Processes

يمكنك استهداف عدة أجهزة كمبيوتر عن طريق فصلها بفاصلة مثل Get-Process -ComputerName SRV1,SRV2.

الخطوات التالية

في هذه المقالة، تعلمت كيفية استخدام أمر PowerShell Get-Process للعثور على العمليات التي تعمل باستخدام PowerShell على أجهزة الكمبيوتر المحلية والبعيدة سواء كانت Linux أو Windows.

الآن، ماذا ستفعل بهذه المعرفة؟ جرب تمرير عملية يتم استردادها بواسطة Get-Process إلى Stop-Process على جهاز كمبيوتر محلي أو بعيد لإنهاءها!

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