في هذا المقال، سنستعرض حلقات PowerShell For، While، Do-While، و Do-Until. سأشرح كيفية بناء حلقات PowerShell وكيفية تحديد الشروط للدخول أو الخروج من الحلقة.
حلقة For في PowerShell
الحلقة For هي حلقة تعدادية، ويتم استخدامها في معظم الأحيان عند الحاجة لتكرار مهمة عدد معين من المرات، أو معالجة مجموعة، أو تحديد العناصر برقم فهرس. تكرر ما دامت شرط الاختبار تقيم إلى صحيح وتخرج عندما تكون خاطئة.

صيغة حلقة For هي كالتالي:
for (<Init>; <Condition>; <Repeat>) { <Script Block> }
- ينفذ مقطع <Init> أمرًا أو مجموعة من الأوامر قبل بدء الحلقة. عادةً ما يتم في هذا المكان تهيئة المتغير التعدادي.
- في القسم ال<Condition>، تقوم بتقييم الاختبار الشرطي. إذا كان صحيحًا، فأنت تدخل الحلقة وتنفذ الأوامر في كتلة النص. ثم يتم تقييم الشرط مرة أخرى حتى ينتج عنه خطأ.
- يرتبط عنصر <Repeat> بتنفيذ أمر أو أوامر، تُفصل بفواصل في كل دورة من الحلقة. عادةً ما يُستخدم لتعديل المتغير التعدادي.
إذا كنت ترغب في تكرار عملية معينة خمس مرات، استخدم المثال التالي:
اعرف أي بيانات حساسة مخزنة في أي مكان، قم بتقييم المخاطر المرتبطة بها، ونفذ تدابير حماية البيانات القائمة على السياسات باستخدام DataSecurity Plus، برنامج حماية البيانات من ManageEngine. ابدأ اليوم بالحصول على نسخة تجريبية مجانية لمدة 30 يومًا بكامل وظائفها.
for ($var = 1; $var -le 5; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

هنا يتم تهيئة المتغير بقيمة 1، والتي هي أقل من 5، لذا أنت تدخل الحلقة وتقوم بتنفيذ النص البرمجي. في كل تكرار، يتم زيادة قيمة المتغير بواحد وتقييمها ضد الشرط حتى يكون النتيجة خاطئة.
ونظرًا لأن التقييم يتم في البداية، إذا كانت النتيجة خاطئة، فإن كتلة الأوامر لن تُنفذ:
for ($var = 6; $var -le 5; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

إذا لزم الأمر، يمكنك استخدام المشغلات المنطقية لتحديد مزيد من الشروط. في هذه الحالة، قمنا بإضافة شروط متعددة. وبسبب أن المشغل المنطقي -and يوصل إلى صحيح فقط عندما تكون كل الشروط صحيحة، يتوقف الحلقة عندما يصل التعبير $var -ne 3 إلى حالة خاطئة.
for ($var = 1; $var -le 5 -and $var -ne 3; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

كما ذكرنا سابقًا، يمكنك تنفيذ أمر أو أكثر في العلامات <Init> و <Repeat>. في المثال أدناه، لدينا متغير $var1 بقيمة ابتدائية تبلغ 1، يتزايد، وتُقيم قيمته لاختبار ما إذا كان أقل من أو يساوي 5.
ومع ذلك، لدينا أيضًا متغيرًا ثانيًا، $var2. لديه قيمة ابتدائية تبلغ 5، تتناقص ولكن لا تُقيم كجزء من الشرط.
for (($var1 = 1), ($var2 = 5); $var1 -le 5; ($var1++), ($var2--)) { Write-Host The value of Var1 is: $var1 Write-Host The value of Var2 is: $var2 } Write-Host End of for loop.

كيفية تحديد شروط الحلقة في PowerShell
في PowerShell، تُنفّذ الأوامر بتسلسل. ولكن في بعض الأحيان، قد تحتاج إلى تكرار أمر أو مجموعة من الأوامر حتى يتم تحقيق شرط معين. يُسمى هذا بـ حلقة.
لتحديد شروط دخول الحلقة أو الخروج منها في PowerShell، يجب عليك استخدام مشغلات المقارنة. ستُتيح لك هذه المشغلات مقارنة القيم أو البحث عن قيمة تُطابق نمطًا معينًا. النتيجة هي قيمة منطقية بولية ( صحيحة أو خاطئة)، تُقيَّم منطق الحلقة.
يمكنك استخدام مشغلات المقارنة لمقارنة القيم العددية:
Operation | Result |
2 -eq 2 | True |
2 -eq 5 | False |
3 -gt 7 | True |
5 -lt 3 | False |
كما يمكنك مقارنة القيم النصية باستخدام مشغلات المقارنة:
تعرف على البيانات الحساسة التي يتم تخزينها وتقييم المخاطر المرتبطة بها وتنفيذ تدابير الحماية المعتمدة على السياسات باستخدام DataSecurity Plus، برنامج الحماية من ManageEngine. ابدأ اليوم بتجربة مجانية تعمل بكامل طاقتها لمدة 30 يومًا.
Operation | Result |
‘PowerShell’ -eq ‘powershell’ | True |
‘PowerShell’ -eq ‘cmd’ | False |
‘PowerShell’ -like ‘power*’ | True |
‘PowerShell’ -notlike ‘*shell’ | False |
حلقة PowerShell Foreach
تستخدم حلقة Foreach لتكرار العناصر في مجموعة. في هذ scenario، ليس هناك شرط للتقييم، ولكنها تكرر العملية حتى يتم معالجة جميع العناصر في المجموعة.
<Figure Foreach_Diagram.png> The syntax for a Foreach loop is the following: foreach ($<item> in $<collection) { <Script Block> }
هنا، نبدأ بعبارة foreach، تليها قوسين تحتوي على متغير ومجموعة لتكرارها. ثم يأتي كتلة النص المراد تنفيذها. يتم إنشاء المتغير تلقائيًا ويتم تعيين قيمة له من المصفوفة قبل كل تنفيذ للحلقة.
مرة أخرى، لتكرار الحلقة خمس مرات، ستحتاج إلى مجموعة تحتوي على خمس عناصر. في هذه الحالة، ستكون القيم الصحيحة من 1 إلى 5:
$collection = 1..5 foreach ($item in $collection) { Write-Host The value of Item is: $item } Write-Host End of foreach loop

يتم تهيئة المتغير بالقيمة الأولى في المجموعة، وهي 1، ثم يتم تنفيذ كتلة النص. في التكرار التالي، يتم تعيين المتغير بالعنصر التالي في المصفوفة، الذي هو 2. سيتم معالجة كتلة النص مرارًا وتكرارًا حتى يتم معالجة جميع العناصر في المجموعة.
على سبيل المثال، إذا كنتَ تود معالجة أول خمس خدمات تعمل على الكمبيوتر الخاص بك، ستبدو حلقتك كما يلي:
foreach ($service in (Get-Service | Select-Object -First 5)) { Write-Host Service name is: $service.name and status is $service.status }

يجب عليك أن تفهم أن هناك فرقًا بين حلقة Foreach والأمر Foreach-Object. من السهل الخلط بينهما. حلقة Foreach تبدأ دائمًا بعبارة Foreach، بينما سيتبع أمر Foreach-Object أمرًا بأنبوب يقوم بمعالجة الكائنات المرسلة من خلاله.
حلقة While في PowerShell
البيان في PowerShell يستخدم لإنشاء حلقة تكرار تقوم بتشغيل أمر أو مجموعة من الأوامر عندما يتم تقييم الشرط ليكون صحيحًا. يتحقق من الشرط قبل تنفيذ كتلة النص. طالما كان الشرط صحيحًا، سيقوم PowerShell بتنفيذ كتلة النص حتى يؤدي الشرط إلى أن يكون غير صحيحًا.

صيغة حلقة While كما يلي:
while (<Condition>){<Script Block>}
على سبيل المثال، إذا كان لديك متغير يسمى var بقيمة افتراضية 1 وتود تكرار الحلقة خمس مرات، يجب أن تتبع الحلقة هذه الهيكل:
تعرف على البيانات الحساسة التي يتم تخزينها وقيمة المخاطر المرتبطة بها، ونفذ إجراءات حماية البيانات القائمة على السياسات باستخدام DataSecurity Plus، برنامج حماية البيانات من ManageEngine. ابدأ اليوم بتجربة مجانية وكاملة الوظائف تدوم 30 يومًا.
$var = 1 while ($var -le 5) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

في المثال أعلاه، يتم تهيئة المتغير خارج الحلقة ويتم زيادته في كتلة النص. ويتم استخدام أمر Write-Host لإخراج قيمة المتغير في كل دورة من الحلقة.
من المهم أن نلاحظ أنه إذا كانت الشرط في البداية false، فإن الحلقة لن تتم تنفيذها. في مثالنا، إذا كان لدينا قيمة للمتغير (var = 6)، فإن أمر الحلقة لن يعمل على الإطلاق ولن تتم تنفيذ كتلة النص.
$var = 6 while ($var -le 5) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

يمكنك استخدام شروط أكثر تعقيداً باستخدام المشغلات المنطقية. على سبيل المثال، إذا كنت ترغب في أن يكون المتغير أقل من 5 وليس يساوي 3، فستبدو الحلقة كما يلي:
$var = 1 while ($var -le 5 -and $var -ne 3) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

كما ذُكر سابقاً، عند استخدام المشغل المنطقي -و، يكون النتيجة true فقط عندما تقوم كل اختبارات الشرط بالتقييم إلى true. في هذه الحالة، عندما يتم تعيين قيمة المتغير بقيمة 3، يصبح الشرط الثاني false: مما يؤدي إلى نتيجة false وإيقاف الحلقة.
حلقة PowerShell Do-While
A Do-While loop is a variant of the While loop, and the main difference is that the script block is executed before the condition is checked. This means that even if the start condition is false, the script block will be executed at least once.

صيغة حلقة Do-While هي كما يلي:
do { <script block> } while (<condition>)
لذلك، إذا استخدمنا نفس المثال كما في السابق، ستكون الشفرة كما يلي:
$var = 1 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5) Write-Host End of Do-While loop.

لنقم بتنفيذ حلقة Do-While بقيمة المتغير var = 6. هنا، ستنفذ الحلقة مرة واحدة قبل التحقق من أن الشرط كان false.
$var = 6 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5) Write-Host End of Do-While loop.

مرة أخرى، يمكن أيضاً استخدام المشغلات المنطقية. إذا استخدمنا نفس المثال كما في السابق، سترى أن الحلقة تتوقف عندما تكون قيمة المتغير 3 لأننا أردنا أن يكون المتغير أقل من 5 وليس يساوي 3:
تعرف على أي بيانات حساسة مخزنة في أي مكان، وقم بتقييم المخاطر المرتبطة بها، ونفذ إجراءات حماية البيانات بناءً على السياسة باستخدام DataSecurity Plus، برنامج حماية البيانات من ManageEngine. ابدأ اليوم باستخدام نسخة تجريبية مجانية وكاملة الميزات لمدة 30 يومًا.
$var = 1 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5 -and $var -ne 3) Write-Host End of Do-While loop.

حلقة Do-Until في PowerShell
تعمل حلقة Do-Until بنفس الطريقة التي يعمل بها الحلقة Do-While: تقوم أولًا بتشغيل كتلة النص النصي ثم تقوم بتقييم الشرط. الفارق هنا هو أنه بينما تدخل حلقة Do-While الحلقة بشرط صحيح، تقوم حلقة Do-Until بالبحث عن شرط خاطئ لدخول الحلقة.

بنية حلقة Do-Until عبارة عن:
do { <script block> } until (<condition>)
كما ترى، تبدو البنية متطابقة تقريبًا مع حلقة Do-While. ومع ذلك، دعنا نرى ما سيكون النتيجة إذا استمرينا في استخدام مثالنا السابق:
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -le 5) Write-Host End of Do-Until loop.

نظرًا لأن الاختبار الشرطي يقيم بقيمة صحيحة، فإن حلقة Do-Until لن تتم تنفيذها لأننا نحتاج إلى نتيجة خاطئة لدخول الحلقة. في هذه الحالة، إذا كنت ترغب في تكرار الحلقة 5 مرات، فيجب تغيير عامل الجمع إلى أكبر من (-gt)، مما سينتج نتيجة خاطئة لأول 5 تكرارات:
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -gt 5) Write-Host End of Do-Until loop.

مرة أخرى، نحن بحاجة إلى أن تكون الشرط الابتدائي خاطئًا لدخول والبقاء في الحلقة، وسيؤثر هذا أيضًا على عوامل التشغيل إذا كنا بحاجة لتحديد تعبير أكثر تعقيدًا.
في المثال التالي، يجب علينا استخدام مشغّل -or لكي تتكرر الحلقة حتى يصبح المتغير الخاص بنا أكبر من 5 (النتيجة الخاطئة المطلوبة) أو يكون مساوياً للرقم 3. لا يمكننا استخدام مشغّل -and، الذي كان سيتطلب أن يكون المتغير أكبر من 5 ومساوياً للرقم 3 في نفس الوقت حيث سيؤدي ذلك إلى حلقة لا نهاية لها.
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -gt 5 -or $var -eq 3) Write-Host End of Do-Until loop.

كيفية التحكم في حلقات PowerShell
يمكنك التحكم في تنفيذ الحلقة باستخدام كلمات رئيسية للخروج من الحلقة دون تقييم الشرط أو تخطي التكرار الحالي في الحلقة. على الرغم من أن هذه الكلمات الرئيسية يمكن أن تكون مفيدة في بعض الأحيان، إلا أنها ليست دائماً موصى بها حيث يمكن أن تجعل النص البرمجي أصعب قراءته.
البيان الفاصل
البيان الفاصل يتوقف ويخرج من الحلقة الحالية فوراً دون تنفيذ بقية الشيفرة في كتلة النص البرمجي للحلقة، وبدون تقييم الشرط المحدد. يتيح هذا لـ PowerShell متابعة تنفيذ بقية الشيفرة.
الكلمة الفاصلة تتصرف بنفس الطريقة بغض النظر عن نوع الحلقة المستخدم. باستخدام أحد الأمثلة من أعلاه، سنقوم بالعد من 1 إلى 5 وخروج من الحلقة إذا تساوى المتغير الذي يعد بالثلاثة. ولكن هذه المرة، سنضيف فاصل بدلاً من استخدام المشغلات المنطقية في شرط الاختبار.
تعرف على البيانات الحساسة التي تم تخزينها في أي مكان، وقم بتقييم المخاطر المرتبطة بها، ونفذ تدابير حماية البيانات القائمة على السياسات باستخدام DataSecurity Plus، البرنامج الخاص بحماية البيانات من ManageEngine. ابدأ اليوم بتجربة مجانية وكاملة الوظائف لمدة 30 يومًا.
لتحقيق هذا، سيتم استخدام البيانif لتحديد معايير الخروج.
For ($var = 1; $var -le 5; $var++) { if ($var -eq 3) {break} Write-Host The value of Var is: $var } Write-Host End of for loop.

عندما تكون قيمة متغير العداد مساوية لـ 3، يتم تنشيط بيان if وتنفيذ الكلمة الرئيسية break. حيث إن كلمة break موضوعة قبل أمر Write-Host في كتلة النص البرمجي، فإن الأخير لن يتم معالجته. يتوقف الحلقة ويستمر النص البرمجي في تنفيذ الشيفرة المتبقية.
كلمة الاستمرار
تسمح الاستمرار بتخطي الجزء المتبقي من الشيفرة، مما يعيدك إلى بداية الحلقة دون الخروج منها.
كما في المثال السابق، سيتم استخدام حلقة For، ولكن هذه المرة بدلاً من الخروج من الحلقة عندما تصل المتغير العددي إلى 3، سيقوم PowerShell بتخطي الكود المتبقي للتكرار الحالي وسيستمر في الحلقة حتى اختبار شرطي false.
for ($var = 1; $var -le 5; $var++) { if ($var -eq 3) {Continue} Write-Host The value of Var is: $var } Write-Host End of for loop.

كما قد لاحظت، عندما تكون قيمة المتغير تساوي 3، يتم تشغيل البيان if، مما ينفذ البيان continue. بعد ذلك، يتخطى باقي الشيفرة داخل الحلقة دون كسرها.
استنتاج
يدعم PowerShell أنواعًا مختلفة من الحلقات، ومن المهم حقًا فهم كيف يمكن أن تساعدك في تبسيط النصوص الخاصة بك وتكرار بعض الإجراءات بطريقة متسقة. لقد غطينا نصائح PowerShell وحيلها بشكل وافٍ على Petri، لذلك تأكد من التحقق من أدلتنا الأخرى حول كيفية كتابة نصوص PowerShell وكيفية استخدام خيار الفوريتش كونارال.
المقال ذا صلة:
Source:
https://petri.com/how-to-use-powershell-for-while-loops/