- يتيح لك Measure-Command قياس المدة الدقيقة للبرامج النصية والأوامر
- يمكن لـ Get-Process وGet-Date حساب تيمبو الجزء النشط من العملية
- من الممكن استخراج البيانات مثل وحدة المعالجة المركزية والذاكرة العشوائية والمستخدم الذي بدأ العملية
- يمكن مراقبة العمليات عن بعد وإرسال النتائج تلقائيًا.

قد يبدو قياس وقت تنفيذ أمرٍ ما في PowerShell مهمةً تقنيةً مخصصةً للمسؤولين أو المطورين، لكن الحقيقة هي أنه ببضعة أسطرٍ فقط من التعليمات البرمجية، يمكنك الحصول على بياناتٍ بالغة الأهمية حول أداء برامجك النصية وعملياتك. يوفر PowerShell أدواتٍ متنوعةً لتسهيل هذه المهمة وتحسين عملياتك المؤتمتة.
استخدم Measure-Command، أداة PowerShell الأصلية
يأتي PowerShell مع الإعداد الافتراضي أمر القياس، مصممة خصيصًا لقياس المدة التي يستغرقها تعبير أو سيناريو ليتم تنفيذه. ما عليك سوى تغليف الكود داخل كتلة من الأقواس المعقوفة {}.
مثال أساسي:
Measure-Command { Get-Process }
يُعيد هذا الأمر كائن TimeSpan يحتوي على معلومات مثل الأيام والساعات والدقائق والثواني والمللي ثانية والوحدات الزمنية.
يمكن استخدامه أيضًا مع البرامج النصية المحفوظة في الملفات:
Measure-Command { C:\Scripts\MiScript.ps1 }
وهو مفيد بشكل خاص لمقارنة الأوقات بين البرامج النصية أو عمليات التنفيذ المختلفة.
احصل على الوقت من بداية العملية
ثمة خيار فعال آخر يتمثل في استخدام الأمر Get-Process للحصول على وقت بدء العملية وحساب الفرق بالنسبة للوقت الحالي، كما يلي:
(Get-Date).Subtract((Get-Process nombreProceso).StartTime)
تتيح لك هذه الطريقة تحديد المدة التي كانت فيها العملية نشطة، على سبيل المثال:
(Get-Date).Subtract((Get-Process CalculatorApp).StartTime)
لإظهار الدقائق التي تم تشغيلها فقط، يمكنك استخدام:
$Fecha1 = (Get-Process CalculatorApp).StartTime
$Fecha2 = Get-Date
($Fecha2 - $Fecha1).TotalMinutes
استخراج بيانات عملية إضافية: المستخدم، وذاكرة الوصول العشوائي، ووحدة المعالجة المركزية
يُتيح لك PowerShell أيضًا إثراء معلومات العمليات من خلال الحصول على تفاصيل مثل المستخدم الذي نفّذ العملية، واستخدام ذاكرة الوصول العشوائي (RAM) ووحدة المعالجة المركزية (CPU) ، واسم الجهاز . لمعرفة المزيد حول قياس وقت تنفيذ الأوامر في PowerShell، يُنصح بالاطلاع على مراجعة تحسين وقت التشغيل في .NET.
$proceso = Get-Process CalculatorApp
$tiempo = (Get-Date).Subtract($proceso.StartTime)
$usuario = (Get-WmiObject Win32_Process | Where-Object { $_.ProcessName -match "CalculatorApp" }).GetOwner().User
$cpu = $proceso.CPU
$ram = $proceso.WorkingSet64 / 1MB
$equipo = ::GetHostName()
باستخدام هذه البيانات، يمكنك إنشاء نصوص المراقبة بشكل أكثر دقة وإرسالها عبر البريد الإلكتروني أو دمجها في المهام المجدولة.
تحليل الحدث: متى بدأ التطبيق أو انتهى
إذا انتهى التطبيق بالفعل، فلا يزال بإمكانك عرض سجلات عارض الأحداث باستخدام المعرفين 4688 (بدء العملية) و 4689 (نهاية العملية)، بشرط تفعيل التدقيق في نهج المجموعة. لمعرفة كيفية أتمتة هذه المهام، يمكنك أيضًا الرجوع إلى هذه المقالة حول Microsoft Flow.
قياس وقت التنفيذ على أجهزة الكمبيوتر البعيدة
بالنسبة لبيئات المؤسسات، من المفيد قياس نشاط التطبيق على أجهزة أخرى عن بعد، على سبيل المثال:
(Get-Date) - (Get-CimInstance Win32_OperatingSystem -ComputerName Nombre_PC).LastBootUpTime
يشير هذا الأمر إلى المدة التي ظل فيها الجهاز البعيد نشطًا، ويمكن دمجه مع Get-Process أو WMI للحصول على تفاصيل أكثر تحديدًا حول كيفية قياس الوقت الذي يستغرقه تشغيل أمر ما في PowerShell.
مقارنة الأداء بين الأوامر
يُسهّل PowerShell معايرة أساليب مختلفة بقياس مدة تنفيذ كل منها، مما يُمكّنك من تحسين نصوصك البرمجية. على سبيل المثال:
Measure-Command { Get-ChildItem -Path C:\Windows\*.txt -Recurse }
Measure-Command { Get-ChildItem C:\Windows -Filter "*.txt" -Recurse }
بهذه الطريقة، يمكنك تحديد الخيار الأكثر فعالية لمهمتك المحددة.
تجنب أخطاء القياس الشائعة
عند حفظ النتائج في ملفات، مثل ملفات .txt ، يجب التأكد من استبعاد هذه الملفات من التحليل لتجنب الحلقات اللانهائية. على سبيل المثال:
gc *.txt -exclude resultado.txt > resultado.txt
وإلا، فقد يستمر البرنامج النصي في تضمين مخرجاته الخاصة، مما يتسبب في نمو هائل للبيانات.
قياس الوقت من سطر الأوامر الكلاسيكي (CMD)
على الرغم من أن هذا الأسلوب ينتمي إلى CMD ، إلا أنه من الممكن أيضًا قياس الأوقات باستخدام البرامج النصية .bat : للتعمق أكثر في كيفية قياس وقت التنفيذ في بيئات مختلفة، راجع هذه المقالة ذات الصلة.
تحسب هذه الطريقة الفرق بين وقت بداية ووقت نهاية تنفيذ الأمر، وعرض النتيجة بتنسيق HH:MM:SS.MS.
إعادة توجيه النتائج إلى السجلات أو البريد الإلكتروني
لمراقبة شاملة، أنشئ نصوصًا برمجية لقياس العمليات دوريًا وإرسال تنبيهات عبر البريد الإلكتروني باستخدام بروتوكول TLS. قد يكون هذا مفيدًا في هذا الصدد.
تُعد هذه التقنية مفيدة بشكل خاص لخوادم ويندوز التي تتطلب مراقبة مستمرة لحالة النظام وكيفية قياس الوقت الذي يستغرقه تنفيذ أمر ما في PowerShell.
يتيح لك الجمع بين Measure-Command و Get-Process و WMI وحسابات التاريخ إنشاء كل شيء بدءًا من التحليلات البسيطة وحتى التقارير المتقدمة لتحسين استخدام الموارد وتحسين إدارة الأداء.
كاتب شغوف بعالم البايت والتكنولوجيا بشكل عام. أحب مشاركة معرفتي من خلال الكتابة، وهذا ما سأفعله في هذه المدونة، لأعرض لك كل الأشياء الأكثر إثارة للاهتمام حول الأدوات الذكية والبرامج والأجهزة والاتجاهات التكنولوجية والمزيد. هدفي هو مساعدتك على التنقل في العالم الرقمي بطريقة بسيطة ومسلية.