كيف تعمل Powershell Foreach وأثناء العمل والحلقات الأخرى

كيف تعمل Powershell Foreach وأثناء العمل والحلقات الأخرى

الخطوة الأولى الحاسمة في تعلم البرمجة هي العمل مع الحلقات. لحسن الحظ ، يستمر PowerShell في النمو بمهاراتك.





أفضل مصادر الأخبار في العالم

يمكنك تأطير الأوامر الموجودة التي تستخدمها كل يوم داخل حلقات لتوفير الوقت والجهد. تقوم البرامج النصية الخاصة بك بالحمل الثقيل أثناء قيامك بالعمل المهم المتمثل في قراءة المزيد من المقالات على MakeUseOf!





Powershell ForEach Loops: الباب أمام معالجة البيانات المتقدمة

ForEach هو الاسم المستعار لكائن ForEach. (الاسم المستعار هو مجرد اختصار لأمر في PowerShell.) هذا هو الوقت المناسب للتحدث عن الطريقة التي يتعامل بها PowerShell مع البيانات.





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

$yourVar = Get-ChildItem *
foreach ($file in $yourVar){
Your Steps
}

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



في PowerShell ، يمكنك التنقل عبر المصفوفة وتنفيذ الإجراء على كل منها باستخدام ForEach. يوفر لك هذا عدة أسطر من التعليمات البرمجية ، وهو أمر مفيد إذا كان لديك نص أطول. على سبيل المثال ، ما يلي هو نص صغير يستخدم بضع حلقات Powershell ForEach. يقوم بإنشاء أرشيف مضغوط لجميع ملفاتك التي لم تفتحها خلال 30 يومًا.

بناء نظام أرشيف ملفات باستخدام ForEach Loops

دعنا نقسم الخطوات لأسفل. انت تستخدم Get-ChildItem للحصول على جميع الملفات في مجلد المستندات. متغير البيئة $ env: USERPROFILE يدير البرنامج النصي باستخدام ملف التعريف الحالي. هذا المتغير قابل للنقل أكثر من المسار المشفر. يتم تعيين نتائج هذا البحث إلى المتغير $ MyDocs . ثم نقوم بإنشاء حلقة ForEach الخاصة بنا من خلال جعلها تمر عبر كل حلقة $ Doc في $ MyDocs .





$oldDocs = @()
$MyDocs = Get-ChildItem -Path '$($env:USERPROFILE)Documents' -Recurse
foreach ($doc in $MyDocs){
if($doc.LastAccessTime -lt $(Get-Date).addDays(-30)){
$oldDocs += $doc
}
}
$ArchiveFolder = New-Item -Path '$($env:USERPROFILE)Documents$((Get-Date -Format MMddyy).toString())' -ItemType Directory
foreach ($doc in $oldDocs){
Move-Item -Path $doc.FullName -Destination '$($ArchiveFolder.FullName)$($doc.Name)' -Confirm $false
}
$source = $ArchiveFolder.FullName
$destination = '$($env:USERPROFILE)Documents$($ArchiveFolder.Name).zip'
Add-Type -AssemblyName 'system.io.compression.filesystem'
[io.compression.zipfile]::CreateFromDirectory($source, $destination)
if(test-path $destination){
Remove-Item -Path $ArchiveFolder -Recurse -Confirm $false
}

داخل الحلقة ، نتحقق لمعرفة ما إذا كان كل ملف LastAccessTime أقدم من 30 يومًا. نحصل على هذا مع الحصول على التاريخ cmdlet واستخدام ملف الاضافات تعمل مع سالب ثلاثين. إذا كان الأمر كذلك ، فنحن نضيف الملف إلى ملف $ myOldDocs مجموعة مصفوفة. بعد اكتمال فرز الملف ، نأخذ بعد ذلك المصفوفة المكتملة وننشئ ملفًا مضغوطًا. هذه العملية أكثر تعقيدًا بعض الشيء لأنها تتضمن استدعاء القليل من .NET. لا تقلق إذا لم تفهمه تمامًا - يمكنك سرقة الكود منه مستند المساعدة هذا من TechNet .

لتقسيم ما يحدث هنا: سننقل جميع ملفاتنا القديمة إلى دليل جديد مسمى بتاريخ اليوم لأكثر من 30 يومًا. بمجرد إنشاء هذا المجلد ، يتعين علينا إنشاء أرشيف ZIP يحمل نفس الاسم. سنختبر للتأكد من نجاح الأرشيف وأن ملف .ZIP موجود ، ثم نحذف المجلد الجديد. قم بتعيين هذا كمهمة مجدولة للتشغيل مرة واحدة في الشهر. ستوفر لنفسك مساحة صغيرة وتحافظ على مجلد المستندات نظيفًا.





بينما افعل بينما: حلقات على الشرط

إذا كنت تريد تشغيل حلقة فقط عند استيفاء شرط معين ، يمكنك استخدام حلقة while. إذا كنت تستخدم متغيرًا لتتبع العد ، فاضبطه أولاً.

i=0
while(i<10){
Your Steps
i+=1
}

تكمن المشكلة في أنك إذا كنت لا تستخدم عدادًا ، فقد ترغب في تشغيل التعليمات البرمجية مرة واحدة على الأقل حتى إذا كان الاختبار صحيحًا. هذا هو الحال مع المثال النصي أدناه. لذلك في هذه الحالات ، تريد استخدام حلقة Do-while. بناء الجملة مختلف قليلا.

do{
Your Steps
}while(Conditional Statement)

استخدام هذه الأشياء ليس واضحًا تمامًا للمبرمج المبتدئ. عند القيام بالكتابة اليومية المعتادة ، قد لا تصادفها كثيرًا. عندما تكون مفيدة بشكل خاص هو عمل مؤقت مؤقت لاختبار نجاح العملية.

لا يمكن لـ netflix الإضافة إلى قائمتي

سنقوم ببناء برنامج نصي سريع لإعادة تشغيل جهاز بعيد والتنبيه إذا لم يعد في غضون 15 دقيقة. يفترض هذا السيناريو أنه خادم منزلي أو جهاز آخر لا يتم إعادة تشغيله كثيرًا. لا تتردد في ضبط الوقت إذا كان جهاز الكمبيوتر الخاص بك يعمل بشكل أسرع.

إعادة التشغيل والتحقق: استخدام حلقة Do-while Loop

هذا البرنامج النصي أبسط قليلاً. أولاً ، يمكنك استخدام ملف إعادة تشغيل الكمبيوتر الأمر لإعادة تشغيل الآلة البعيدة. (استخدمنا عنوان IP زائفًا هنا لأوامر إعادة التشغيل ، تأكد من الكتابة فوق هذا باستخدام DNS / IP لجهاز الكمبيوتر الخاص بك). ثم قم بإنشاء متغير العداد ، أنا وقم بتعيينه على 0. بعد ذلك ، لديك حلقة Do مع Start-Sleep وإيقاف النص لمدة 300 ثانية (خمس دقائق). الأمر الثاني يضيف واحدًا إلى العداد.

Restart-Computer -ComputerName 127.0.0.1
i=0
do{
Start-Sleep -Seconds 300
$i += 1
}while((!(Test-Connection 127.0.0.1 -Quiet)) -or $i -gt 3)
if($i -gt 3){
Write-Ouput 'Remote Machine not responding, please check.'
}
else{
Write-Output 'Reboot Succeeded'
}

ثم لدينا معايير الوقت. نستخدم اختبار Or للتأكد من أن الفشل يولد تنبيهًا. البديل هو البرنامج النصي الذي يتكرر باستمرار في انتظار الآلة البعيدة. للتحقق من الجهاز ، نستخدم ملف اختبار الاتصال cmdlet. للتبسيط ، هذا هو Ping لـ PowerShell. نضيف المعلمة -هادئ مما يجبره على إرجاع True أو False بدلاً من نتائج الحزم. يتحقق الجزء الثاني من عبارة Or إذا كان العداد أكثر من ثلاثة.

بمجرد اكتمال الحلقة ، نريد إنشاء الإخراج. هذا يعني أننا بحاجة إلى التحقق من العداد الخاص بنا. هذا بيان سريع if / else. إذا كان أكبر من ثلاثة ، فإن البرنامج النصي يخرج بأن الآلة البعيدة لا تستجيب. إذا لم يكن الأمر كذلك ، فسيظهر أن إعادة التشغيل كانت ناجحة.

حلقات أخرى

يتوفر نوعان آخران من الحلقات في PowerShell. إنها مرتبطة إلى حد ما بالحلقتين السابقتين ، فهي ليست شائعة الاستخدام. تعمل حلقة For بشكل مشابه لمثال while. قمت بتعيين جميع المعايير الخاصة بك في التقييم ، ثم قم بتعيين أوامر cmdlets الخاصة بك.

for($i = 0;$i -lt 10;$i++){
Your Steps
}

تكون حلقات Do until مثل حلقات Do while ، ما عليك سوى تغيير العبارة while إلى until. في المثال النصي ، سيكون نفس السلوك. إنه اختيار أسلوب ، لكن Do while يكون أكثر تنوعًا في المواقف الأخرى. لذلك إذا كنت تتذكر واحدة فقط ، فإن Do while يكون أكثر فائدة.

يحتوي PowerShell على مساعدة لكل من هذه الحلقات أيضًا. يمكنك الحصول على المساعدة عن طريق الإضافة حول قبل اسم الحلقة في Get-Help. يمكنك بعد ذلك الاطلاع على أمثلة ونصائح أخرى لكل نوع. يجب أن تكون هذه مفيدة إذا واجهتك مشكلة.

الاستمرار في النمو معك

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

ما هو برنامج PowerShell النصي الذكي الذي قمت بإنشائه باستخدام الحلقات؟ تشاركه معنا في التعليقات.

يشارك يشارك سقسقة بريد الالكتروني احذف ملفات ومجلدات Windows هذه لتحرير مساحة على القرص

هل تحتاج إلى إفراغ مساحة القرص على جهاز الكمبيوتر الذي يعمل بنظام Windows؟ فيما يلي ملفات ومجلدات Windows التي يمكن حذفها بأمان لتحرير مساحة على القرص.

اقرأ التالي
مواضيع ذات صلة
  • برمجة
  • بوويرشيل
  • البرمجة النصية
نبذة عن الكاتب مايكل ماكونيل(44 مقالة منشورة)

لم يستخدم مايكل جهاز Mac عندما كان محكومًا عليه بالفشل ، ولكن يمكنه كتابة التعليمات البرمجية في Applescript. لديه درجات علمية في علوم الكمبيوتر واللغة الإنجليزية. كان يكتب عن أجهزة Mac و iOS وألعاب الفيديو لفترة من الوقت الآن ؛ وقد كان قردًا في مجال تكنولوجيا المعلومات خلال النهار لأكثر من عقد من الزمان ، وتخصص في البرمجة النصية والمحاكاة الافتراضية.

كيفية حل المتغير في Excel
المزيد من Michael McConnell

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

انقر هنا للاشتراك