تم تحديث هذا المقال لعام 2023!
النصوص يمكنها اتخاذ قرارات. كيف؟ عن طريق استخدام مفهوم يُسمى المنطق الشرطي. تعتبر البيانات الشرطية if في PowerShell وبنية if/else الطرق الشائعة لتعريف الشروط.
عند كتابة نصوص PowerShell، تقوم بذلك بمهمة معينة في الاعتبار. ولكن، يمكن أن تحتوي العملية على إجراءات متعددة محتملة استنادًا إلى شرط واحد أو أكثر. هذا هو الموقف الذي تأتي فيه بنية البيان الشرطي If في PowerShell.
في هذا المقال، ستتعلم بنية If-Else في PowerShell وتفهم بناءها النحوي وكيفية عملها. كما ستتعلم بعض الطرق التي يمكنك استخدام بيان PowerShell If لإضافة التعامل مع المنطق الشرطي في نصوصك من الأمثلة.
فهم بنية البيان الشرطي If في PowerShell
تقوم بنية if-else في PowerShell بتقييم تعبيرات شرطية واحدة أو أكثر. أدناه سترى بناء البيان الشرطي If. يُطلق على هذا النمط في كثير من الأحيان التحكم في التدفق.
كما يمكن ملاحظة من النحو أعلاه، تكون كل اختبار محاطة بأقواس ()
. يمكن أن تستخدم الاختبارات مشغلات مختلفة، مثل مشغلات المقارنة و المشغلات المنطقية,
تحتوي قوائم البيانات على الشيفرة المقصود تشغيلها إذا كانت نتيجة الاختبار تقييم إلى صحيح.
ثم، هناك ثلاثة عبارات ممكنة في مجموعة If statement. هذه هي عبارات IF، ELSEIF، وELSE.
- تحتوي عبارة
if
على أول اختبار للتقييم، تليها قائمة البيانات الأولى المحاطة بالأقواس المعوجة{}
. تعتبر عبارة PowerShell if العبارة الوحيدة المطلوبة للوجود. - تُستخدم عبارة
elseif
لإضافة الشروط. يمكنك إضافة عدة عبارات ElseIf عندما يكون لديك شروط متعددة. سيقوم PowerShell بتقييم كل من هذه الشروط بشكل تسلسلي. - لا تقبل عبارة
else
أي شرط. تحتوي قائمة البيانات في هذه العبارة على الكود الذي يجب تشغيله إذا كانت جميع الشروط السابقة المختبرة خاطئة.
فهم منطق عبارة If في PowerShell
لفهم أكبر لكيفية عمل عبارة PowerShell If-Else، اطلع على منطقها. يوضح الرسم البياني أدناه الجريان الأساسي لعبارة PowerShell If-Else.

عند تشغيل عبارة if، يقوم PowerShell بتقييم كل شرط للتحقق مما إذا كان الكود يعيد القيمة صحيحة أم خاطئة. وإليك ملخص للسلوك:
- يقوم PowerShell بتقييم الشرط في الاختبار 1.
- إذا كانت نتيجة الاختبار 1 تعيد صحيح، سيتم تشغيل الكود داخل قائمة العبارة If، ثم يخرج PowerShell من العبارة If.
- إذا كانت نتيجة الاختبار 1 تعيد خاطئة، يستمر PowerShell في تقييم الشرط (الاختبار n) في العبارة ElseIf التالية.
- إذا كانت نتيجة الاختبار n ترجع خطأ، يستمر PowerShell في تقييم الشرط (اختبار n) في بيان ElseIf التالي، إذا كان بيان ElseIf آخر موجودًا -أو-
- إذا كانت نتيجة اختبار n ترجع خطأ، يتم تشغيل الكود في بيان Else، وسيقوم PowerShell بالخروج من بيان If -أو-
- إذا كانت نتيجة اختبار
n ترجع صحيحًا، يتم تشغيل الكود في بيان ElseIf، وسيقوم PowerShell بالخروج من بيان If.
استخدام بيان If-Else في PowerShell
في الأقسام التالية، ستجد عدة أمثلة على كيفية استخدام بيان If في PowerShell عند كتابة النصوص البرمجية. التقنيات التي ستتعلمها يمكن أن توجهك في استخدام بيان If في حال واجهتك حالة واقعية تتطلب استخدامه.
شرط If-Else مفرد
نبدأ بالأساسيات، وهو بيان If مفرد في PowerShell. يجب استخدام بيان if المفرد عندما يكون هناك شرط واحد فقط للاختبار.
الشرح أدناه يختبر ما إذا كانت قيمة المتغير $num
أكبر من 10. إذا كانت النتيجة صحيحة، سيتم عرض النتيجة التي تقول "$num أكبر من 10"
على الشاشة. إذا كانت النتيجة خاطئة، لا يقوم PowerShell بأي شيء لأن هناك شرط واحد فقط للاختبار.
إذا كنت تتحقق فقط من قيمة معينة، مثل
if ($Value) { }
، فستقوم PowerShell بفحص ما إذا كانت القيمة$Value
ليست$Null
،0
،$False
، سلسلة فارغة، أو مصفوفة فارغة.
لصق الكود أعلاه في PowerShell سيعطيك النتيجة الموضحة أدناه.

الآن، يمكنك إضافة تعليمة Else إذا كنت ترغب في إضافة “fallback” افتراضية بدلاً من السماح لـ PowerShell بعدم القيام بأي شيء عندما يكون نتيجة الاختبار خاطئة.
في المثال أدناه، سيتم تشغيل الكود في تعليمة Else إذا كانت قيمة المتغير $num
ليست أكبر من 10.
تشغيل الكود المعدل في PowerShell يعطيك الإخراج الموضح أدناه.

ابتداءً من PowerShell 7.0، تم تقديم بنية جديدة للتعليمة If باستخدام عامل معيني. يمكن للتعليمات If الفردية الاستفادة جيدًا من هذا الصيغة الجديدة.
باستخدام نفس المثال أعلاه، هكذا سيبدو الكود مع المشغل المعيني.

اختبار $Null في تعليمة If في PowerShell
قد تعتقد أن اختبار الحالة $Null
أمرًا مباشرًا. ولكن، يعتبر الموقع الذي تضع فيه قيمة $Null
مهمًا حيث قد لا يؤدي إلى نفس النتيجة في كل حالة. الأفضل دائمًا وضع حالة $Null
على اليسار مثل هذا.
إذا وضعت اختبار $Null
على الجانب الأيمن، وكانت القيمة على الجانب الأيسر قائمة، مثل مصفوفة، فإن $Null
سيعمل كفلتر. كما يمكن رؤية ذلك من المثال أدناه، إذا تم وضع $Null
على الجانب الأيسر، فستكون نتائج البوليان متسقة.
$List = @(1,2,2,3,4)
$List -NE $Null
$List -EQ $Null
$Null -NE $Null
$Null -EQ $Null

شروط If-Else متعددة باستخدام ElseIf
عند تقييم شروط متعددة، يجب عليك إضافة تعليمة ElseIf واحدة أو أكثر. كل تعليمة ElseIf تحتوي على التعبير الاختباري والشفرة المراد تشغيلها.
النص أدناه، عند تنفيذه، سيستمر في طلب اسم فاكهة حتى يتم إصدار مفتاح CTRL+C
، أو يُدخل المستخدم الحرف “X”.
ثم، ستمر التعليمة If بالمرور عبر كل شرط بالتسلسل حتى تجد تطابقًا. إذا لم يتطابق الإدخال مع أي من الشروط، سيتم تنفيذ الشفرة داخل التعليمة Else.
فيما يلي توضيح لكيفية سلوك النص أعلاه عند تشغيله في PowerShell.

تقرير حالة مساحة القرص الحرة
تقرير مساحة القرص الحرة هو مهمة شائعة لمسؤولي النظام. الطريقة العادية لتقرير معلومات المساحة لأقراص ثابتة على جهاز Windows تدور حول الكود أدناه.
المعلومات التي سيعيد الكود أعلاه ستبدو مثل تلك الموضحة في اللقطة الشاشة التالية.

كما ترى، يوضح الإخراج أعلاه حرف القرص، قيم المساحة الحرة، وخصائص أخرى. بينما الإخراج أعلاه مقبول، إلا أنه ليس بديهيًا. كيفية تقديم المعلومات لا تشير إلى ما إذا كانت مساحة القرص في حالة حرجة أو تحذير أو عادية.
استخدام تعليمة PowerShell If لتحسين الكود
A more intuitive output can be achieved using the PowerShell If-Else statement by adding conditions to check if the free space is over or below certain thresholds. And these thresholds will define the status of the free disk space.
النص المثالي أدناه يقوم بما يلي:
- استخدام قيمة المتغير
$Critical
، تعريف الحد الذي سيتم فيه وسم نسبة المساحة الحرة كـ حرج. - استخدم قيمة المتغير
$Warning
لتحديد الحد الذي سيتم فيه وضع علامة على نسبة المساحة الفارغة بأنها تحذير. - احصل على جميع معلومات الأقراص الثابتة من الجهاز المحلي
- قم بالتكرار عبر جميع معلومات القرص لتحديد المساحة الفارغة ووضع علامة على حالتها.
- إذا كانت نسبة المساحة الفارغة أعلى من قيمة المتغير
$Warning
، يتم وضع علامة على حالة مساحة القرص كـ طبيعي. - إذا كانت نسبة المساحة الفارغة أعلى من قيمة المتغير
$Critical
، يتم وضع علامة على حالة مساحة القرص كـ تحذير. - إذا كانت نسبة المساحة الفارغة أقل من أو تساوي قيمة المتغير
$Critical
، يتم وضع علامة على حالة مساحة القرص كـ حرج.
- إذا كانت نسبة المساحة الفارغة أعلى من قيمة المتغير
- قم بتكوين خصائص الكائن
'حرف القرص'
،'اسم القرص'
،'المساحة الإجمالية (غيغابايت)'
،'المساحة الفارغة (غيغابايت)'
،'المساحة الفارغة (%)'
، و'الحالة'
. - الرجاء إعادة التقرير النهائي.
انسخ الكود أدناه واحفظ النص البرمجي بالاسم Get-DiskSpace.ps1
. لا تنسى تغيير قيم المتغيرات $Critical
و $Warning
للاختبار باستخدام حدود مختلفة.
يمكنك أيضًا تعيين نتيجة الشرط if/else إلى متغير، مثل
$Status = if ($percentFree -gt $Warning) { 'Normal' }
لجعل الشرط أقصر.
بمجرد حفظ النص البرمجي، قم بتجربته بالاتصال باسمه في PowerShell. أدناه عرض توضيحي لكيفية عمل هذا النص البرمجي.

كما يمكن ملاحظة من الإخراج، فإن الحالة لكل قرص يتم تحديدها بواسطة نسبة مساحة القرص الحرة، والتي كانت نتيجة استخدام شروط متعددة مع PowerShell If-Else.
شروط متعددة ومتداخلة If-Else
لنفترض أن لديك عبارة شرطية if-else مع شرط محدد في كتلة else
. عند تشغيل البيان الشرطي if-else، يتم استدعاء كتلة else
إذا كان الكود داخل كتلة if
يعيد قيمة خاطئة.
داخل كتلة else
، تحتاج إلى إجراء اختبار شرطي آخر. نتيجة لذلك، تحتاج إلى عبارة If-Else أخرى. يُطلق على هذ scenario اسم If-Else متداخل. يُستخدم عادة العبارة If-Else المتداخلة إذا كان ال If-Else الداخلي يعتمد على نتيجة العملية في If-Else الخارجية.
يمكن أن تكون استخدامات العبارات If-Else المتعددة والمتداخلة مربكة للغاية. النقطة الرئيسية هي تذكر موضع الهيكل والتأكد من تعريض الكود الخاص بك. سيساعد تعريض الكود الخاص بك في التعرف بسهولة وفصل العبارات If-Else الخاصة بك.
مثال على العبارات If-Else المتعددة/المتداخلة
يوضح النص المثالي أدناه كيف يمكن أن تعتمد العبارات If-Else المتعددة والمتداخلة على نتيجة بعضها البعض. منطق الكود أدناه هو كما يلي.
- إذا كانت
$SendEmail
هي$false
، فسيقوم النص بعملية الإنهاء والخروج. - إذا كانت
$SendEmail
هي$true
، فإن المتغيرات$From
و$To
يجب أن لا تكونا فارغتين أو null. خلاف ذلك، سيتم ضبط$abortFlag
إلى 1. - إذا كانت
$SendEmail
هي$true
وكان$CCEnabled
هو$true
، فإن المتغير$CC
يجب أن لا يكون فارغًا أو null. خلاف ذلك، سيتم ضبط$abortFlag
إلى 1. - إذا كانت
$SendEmail
تساوي$true
و$BCCEnabled
تساوي$true
، فيجب ألا يكون متغير$BCC
فارغًا أو معلومة. وإلا، سيتم تعيين متغير$abortFlag
إلى 1. - إذا كانت قيمة
$abortFlag
تساوي 1، سيتم الخروج من النص في هذه النقطة ولن يتابع. - إذا كانت قيمة
$abortFlag
تساوي 0، سيتابع النص حتى النهاية.
انسخ الكود أدناه واحفظه بصيغة Send-MyMail.ps1
. لا تقم بتغيير أي قيم حتى الآن.
بمجرد حفظ الملف، قم بتشغيله في PowerShell، كما هو موضح أدناه. توضح الاستعراضات أدناه نتيجة النص عندما تظل قيم المتغيرات دون تغيير.

بعد ذلك، قم بتعديل النص وتحديث كافة المتغيرات بشكل صحيح، مثل المقتطف التالي.
بعد تعديل المتغيرات، احفظ النص، وقم بتشغيله مرة أخرى. يجب أن يعرض لك نفس النتيجة، كما هو موضح أدناه.

الآن، قم بتعديل المتغيرات وجرب مجموعات من التحويلات لاختبار كيف ستتأثر الجملة الشرطية المدمجة. يساعد التعديل والاختبار الشخصي على فهم المنطق بشكل أعمق.
الملخص
في هذا المقال، تعرفت على بنية المنطق الشرطي – بنية البيانات If في PowerShell. تتيح جملة If-Else للمبرمجين صياغة المنطق الشرطي وتوجيه إجراءات النصوص الخاصة بهم بناءً على نتائج الاختبارات.
باستخدام الأمثلة الموجودة في هذا المقال، يجب أن تكون قد تعلمت الطرق والتقنيات لاستخدام جملة If-Else عند إنشاء نصوص القرارات. يمكن أن تكون جملة If-Else بسيطة باستخدام شرط واحد وتصبح أكثر تعقيدًا كلما حفرت أعمق في البيانات المدمجة لجملة If-Else.
ما رأيك في عبارة If-Else؟ هل تعتقد أنك ستستخدمها أكثر بعد قراءة هذا المقال؟ ما هي الأغراض الأخرى التي يمكنك أن تفكر في تطبيق المعرفة التي اكتسبتها هنا؟