عندما تم إصدار PowerShell لأول مرة ، كان الهدف هو إحضار أدوات برمجة نصية قوية إلى Windows ، والتي كانت عادةً تعتمد على واجهة المستخدم الرسومية في ذلك الوقت. منذ ذلك الحين ، نمت PowerShell لتصبح واحدة من أشهر لغات البرمجة النصية.
أحد أكبر المساهمين في هذا الارتفاع في الشعبية هو أن فريق PowerShell في Microsoft جعله مفتوح المصدر في عام 2016 ، حيث قدم PowerShell Core لـ PowerShell الإصدار 6. ومع ذلك ، تسبب ذلك في بعض المشكلات غير المتوقعة ، مثل الاضطرار إلى الدعم التوافق بين الإصدار 5.1 (Windows PowerShell) والإصدار 6.2 (PowerShell Core) ، أو وجود نفس أوامر cmdlets تقوم بأشياء مختلفة قليلاً على إصدارات مختلفة من. NET.
لتسوية ذلك ، أعلن فريق PowerShell أنهم سيتقاعدون من PowerShell 5.1 وأن الإصدار التالي بعد 6.2 سيكون PowerShell 7 ، والذي يهدف إلى استبدال Windows PowerShell على أنظمة تشغيل Windows دون التضحية بأي توافق عند التشغيل على Mac أو لينكس.
PowerShell 7 ذهب إلى GA في مارس من العام الماضي ، وبينما تعمل أوامر cmdlets نفسها على أي نظام تشغيل ، لا تزال هناك بعض أفضل الممارسات التي يجب اتباعها للتأكد من عمل البرامج النصية PowerShell بسلاسة بغض النظر عن مكان تشغيلها.
استخدم أسماء الدليل الصغيرة
في نظام التشغيل Windows ، يتم استخدام حرف
\
أو الخط المائل العكسي لتدوين الدلائل المتداخلة في نظام الملفات ، بينما في Linux و macOS ، يتم استخدام
/أو حرف الشرطة المائلة للأمام يفعل ذلك بدلاً من ذلك ويتم استخدام الشرطة المائلة للخلف كحرف هروب.(إذا واجهتك مشكلة في الحفاظ على هذين المستقيمين ، فقط تخيل أنه ينقلب. الخط المائل العكسي يتراجع ، الخط المائل للأمام يسقط للأمام)
يمكن أن يمثل هذا بعض التحديات عند البرمجة النصية بمعظم اللغات الأخرى ، ولكن PowerShell 7 سيترجم إما إلى كائن دليل ولا يهتم حقًا بالأحرف المستخدمة لتقسيم المسار. ومع ذلك ، فإن أحد المجالات التي قد تتعرض فيها للمشاكل هو أن أنظمة ملفات Linux و macOS تهتم بالأحرف الكبيرة ، وستتعامل مع أسماء الدلائل في حالات مختلفة كدليل مختلف.
أفضل الممارسات هنا هي الاحتفاظ بأسماء الدلائل بأحرف صغيرة ، بغض النظر عن المسار الذي تستخدمه. إذا كنت بحاجة إلى ذلك ، يمكنك تمرير المسار كسلسلة واستدعاء طريقة
ToLower ()عليها في التعليمات البرمجية الخاصة بك ، ولكن هذا لن يعمل إلا إذا كان اسم الدليل بالفعل في مستوى أقل

لا تستخدم الاسم المستعار
يمكن أن يكون Aliasing طريقة رائعة لتقصير كمية الكتابة التي يتعين عليك القيام بها عند تشغيل PowerShell من وحدة التحكم. من الأسهل كثيرًا كتابة
ls
أو
cgi
من
Get-ChildItemحتى مع استكمال علامة التبويب. ومع ذلك ، نادرًا ما يكون استخدام الأسماء المستعارة في النصوص البرمجية فكرة جيدة لأنها تجعل النص يعتمد على تعيين هذا الاسم المستعار أينما يتم تشغيله.
هذا صحيح بشكل خاص لأنظمة Linux و macOS. على تلك الأنظمة الأساسية ، بدلاً من استخدام اسم مستعار لتشغيل أمر PowerShell آخر ، فإنه يقوم بتشغيل الأمر الأصلي ، مما يعني أن كائن الإرجاع سيكون مختلفًا تمامًا ، وسيؤدي ذلك إلى التخلص من بقية البرنامج النصي.

ls
و
Get-ChildItemيعمل على Windows 10 مقابل Ubuntu Linux.
بعض الأوامر مثل
ls
قد لا تتغير كثيرًا ، ولكن مع أوامر أخرى مثل الأمر
date، يُرجع PowerShell كائنًا مختلفًا تمامًا عن أمر Linux الأصلي ، والذي سيتخلص من أي شيء يعتمد على الإخراج لاحقًا في الكود.حتى إذا كنت بحاجة فقط إلى قيمة السلسلة في نص برمجي PowerShell ، فاستخدم PowerShell للحصول عليها.

dateإرجاع كائن DateTime على Windows وكائن String على Linux.
استخدم بيان التبديل لتحديد نظام التشغيل
في بعض الأحيان ، لديك تبعية لا يمكنك كتابة نصوص حولها ، بغض النظر عن أنواع الحيل التي تستخدمها. في هذه الحالات ، يحتوي PowerShell 7 على عدد قليل من العلامات المحجوزة التي سترجع
true
أو
false
اعتمادًا على نظام التشغيل الذي تعمل منه. على سبيل المثال ،
$ IsMacOS
سيعود
True
على macOS و
False
على أي نظام تشغيل آخر ، و
$ IsLinux
سيعود
Trueبغض النظر عن توزيع Linux الذي تستخدمه.
هناك أيضًا علامة
$ IsWindows
، ولكن مع تحذير واحد كبير: إنها تُرجع فقط
Trueعند تشغيل PowerShell Core أو PowerShell 7 على نظام التشغيل Windows. لم يتم نقله مرة أخرى إلى Windows PowerShell ، لذلك سيؤدي إلى ظهور خطأ عند التشغيل هناك.
توصل Tyler Leonhardt من فريق PowerShell في Microsoft إلى حل بديل رائع لتحديد نظام التشغيل الذي تستخدمه عند تشغيل الأنظمة الأساسية المشتركة ، وهو عبارة التبديل التي يصفها هنا.

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