مقدمة عن البرمجة النصية

مكتمل

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

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

قبل أن تبدأ في تعلم البرمجة النصية، دعنا نلقِ نظرة عامة على ميزات لغة البرمجة النصية في PowerShell:

  • متغيرات. يمكنك استخدام المتغيرات لتخزين القيم. يمكنك أيضا استخدام المتغيرات كوسيطات للأوامر.

  • الدالات. الدالة هي قائمة عبارات مُسماة. تنتج الوظائف إخراجا يتم عرضه في وحدة التحكم. يمكنك أيضا استخدام الوظائف كإدخال للأوامر الأخرى.

    إشعار

    تتعلق العديد من المهام التي تستخدم PowerShell من أجلها بالآثار الجانبية أو التعديلات على حالة النظام (محلي أو غير ذلك). غالبًا ما يكون الإخراج أمرٌ ثانوي (بيانات الإبلاغ، على سبيل المثال).

  • التحكم بالتدفق. التحكم بالتدفق هو كيفية التحكم في مسارات التنفيذ المختلفة باستخدام بُنى مثل If وElseIf وElse.

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

  • معالجة الأخطاء. من المهم كتابة نصوص برمجية قوية يمكنها التعامل مع أنواع مختلفة من الأخطاء. تحتاج إلى معرفة الفرق بين أخطاء الإنهاء وعدم تحديدها. يمكنك استخدام بنيات مثل Try و Catch. نغطي هذا الموضوع في الوحدة المفاهيمية الأخيرة لهذه الوحدة.

  • التعبيرات. تستخدم التعبيرات بشكل متكرر في البرامج النصية PowerShell. على سبيل المثال، لإنشاء أعمدة مخصصة أو تعبيرات فرز مخصصة. التعبيرات هي تمثيلات للقيم في بناء جملة PowerShell.

  • تكامل ‎.NET و‎.NET Core. تقدم PowerShell تكاملًا قويًا مع NET. و‎.NET Core. هذا التكامل يتجاوز نطاق هذه الوحدة.

تشغيل برنامج نصي

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

يحاول PowerShell حمايتك من إجراء أشياء عن غير قصد بطريقتين رئيسيتين:

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

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

لإنشاء برنامج نصي وتشغيله:

  1. أنشئ بعض عبارات PowerShell مثل ما يلي واحفظها في ملف ينتهي بامتداد .ps1:

    # PI.ps1
    $PI = 3.14
    Write-Host "The value of `$PI is $PI"
    
  2. شغَّل البرنامج النصي عن طريق استدعائه باسمه ومساره:

    إشعار

    قبل تشغيل البرنامج النصي، تأكد من الواجهة الحالية هي PowerShell. بدلًا من ذلك، في Linux أو macOS، يمكنك وضع النظام بالكامل أعلى ملف البرنامج النصي لتعريف PowerShell باعتبارها مترجم للبرنامج النصي.

    ./PI.ps1
    

    من المستحسن تضمين ملحق اسم الملف في الاستدعاء، لكنه غير مطلوب.

سياسة التنفيذ

يمكنك إدارة نهج التنفيذ باستخدام أوامر cmdlets هذه:

  • Get-ExecutionPolicy. يرجع الأمر cmdlet هذا نهج التنفيذ الحالي. في Linux وmacOS، القيمة التي أُرجِعت هي Unrestricted. بالنسبة لأنظمة التشغيل هذه، لا يمكنك تغيير القيمة. ذلك القيد لا يجعل Linux أو Mac أقل أمانًا. تذكر أن نهج التنفيذ هو ميزة أمان لا آلية أمان.

  • Set-ExecutionPolicy. إذا كنت تستخدم حاسوب يعمل بنظام Windows، يمكنك استخدام أمر cmdlet هذا لتغيير قيمة نهج تنفيذ. فإنه يأخذ معلمة -ExecutionPolicy. هناك عدد قليل من القيم الممكنة. انها فكرة جيدة لاستخدام Defaultباعتبارها القيمة. تعيِّن تلك القيمة النهج إلى Restricted بالنسبة لعملاء Windows و RemoteSigned بالنسبة لخادم Windows. Restricted يعني أنك لا تستطيع تشغيل البرامج النصية. يمكنك تشغيل الأوامر فقط، وهو أمر منطقي بالنسبة للعميل. RemoteSigned يعني أن البرامج النصية المكتوبة على الحاسوب يمكن تشغيلها. يجب توقيع البرامج النصية التي تم تنزيلها من الإنترنت باستخدام توقيع رقمي من ناشر موثوق به.

    إشعار

    هناك قيم أخرى يمكنك استخدامها. لمعرفة المزيد، راجع نُبذة حول نُهج التنفيذ.

المتغيرات

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

$PI = 3.14

العمل مع المتغيرات: علامات الاقتباس والاستنتاج

عند إخراج النص عبر Write-Host أو Write-Output، يمكنك استخدام علامات اقتباس مفردة أو مزدوجة. يعتمد اختيارك على ما إذا كنت تريد استيفاء القيم. هناك ثلاث آليات يجب أن تعرفها:

  • علامات اقتباس مفردة. تحدد علامات الاقتباس المفردة الحروف؛ ما تكتبه هو ما تحصل عليه. إليك مثال:

    Write-Host 'Here is $PI' # Prints Here is $PI
    

    إذا كنت ترغب في استيفاء القيم، لتفسير القيمة $PI وطباعتها، تحتاج إلى استخدام علامات اقتباس مزدوجة.

  • علامات اقتباس مزدوجة. عند استخدام علامات اقتباس مزدوجة، تُستوفى قيم المتغيرات في سلاسل:

    Write-Host "Here is `$PI and its value is $PI" # Prints Here is $PI and its value is 3.14
    

    هناك أمران يحدثان هنا. تتيح لك الفاصلة العليا المائلة (`) تجنب ما يمكن أن يكون استنتاج للمثيل الأول من $PI. في المثال الثاني، تُستوفى القيمة وتُكتب.

  • $(). يمكنك أيضًا كتابة تعبير داخل علامات اقتباس مزدوجة. للقيام بذلك، استخدم البنية $(). إحدى طرق استخدام هذه البنية هي استيفاء قيم خصائص العناصر. إليك مثال:

    Write-Host "An expression $($PI + 1)" # Prints An expression 4.14
    

النطاق

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

أنواع النطاق

لنتحدث عن النطاقات المختلفة:

  • النطاق العمومي. عندما تنشئ بُنى مثل المتغيرات في هذا النطاق، فإنها تستمر في الوجود بعد انتهاء جلستك. يمكن القول أن أي شيء موجود عندما تبدأ جلسة PowerShell جديدة يقع في هذا النطاق.

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

  • النطاق المحلي. النطاق المحلي هو النطاق الحالي، ويمكن أن يكون النطاق العالمي أو أي نطاق آخر.

قواعد النطاق

تساعدك قواعد النطاق على فهم القيم المرئية عند نقطة معينة. كما أنها تساعدك على فهم كيفية تغيير قيمة.

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

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

    $test = 'hi'
    

    إذا كان لديك ملف Script.ps1 يحتوي على المحتوى التالي، فإنه يطبع "مرحبا" عند تشغيل البرنامج النصي:

    Write-Host $test # Prints hi
    

    يمكنك أن ترى أن ذلك المتغير $test مرئيا في كلٍ من النطاق المحلي ونطاقه التابع، في هذه الحالة، نطاق البرنامج النصي.

  • يمكن تغيير العناصر فقط في النطاق الذي جرى إنشاؤه. افتراضيًا، يمكنك تغيير عنصر فقط في النطاق الذي جرى إنشاؤه. يمكنك تغيير هذا السلوك عن طريق تحديد نطاق مختلف صراحةً.

ملفات التعريف

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

أنواع ملفات التعريف

تدعم PowerShell عدة ملفات من ملفات التعريف. يمكنك تطبيقها على مختلف المستويات، كما ترون هنا:

‏‏الوصف المسار
جميع المستخدمين وجميع المضيفين $PSHOME\Profile.ps1
جميع المستخدمين، والمضيف الحالي $PSHOME\Microsoft.PowerShell_profile.ps1
المستخدم الحالي، وجميع المضيفين $Home [My ]الوثائق\PowerShell\Profile.ps1
المستخدم الحالي، والمضيف الحالي $Home [My ]الوثائق\PowerShell\Microsoft.PowerShell_profile.ps1

هناك متغيران هنا، وهما: $PSHOME و $Home. $PSHOME يشير إلى دليل التثبيت لـ PowerShell. $Home هو الدليل الرئيسي للمستخدم الحالي.

تدعم البرامج الأخرى أيضًا ملفات التعريف، مثل Visual Studio Code.

إنشاء ملف التعريف

عند تثبيت PowerShell لأول مرة، لا توجد ملفات تعريف، ولكن هناك $Profile متغير. إنه عنصر يشير إلى المسار حيث يجب وضع كل ملف تعريف من المقرر تطبيقه. لإنشاء ملف التعريف:

  1. حدد المستوى الذي تريد إنشاء ملف التعريف عليه. يمكنك تشغيل $Profile | Select-Object * لمشاهدة أنواع ملفات التعريف والمسارات المقترنة بها.

  2. حدد نوع ملف التعريف ثم أنشئ ملفًا نصيًا في موقعه باستخدام أمر مثل هذا الأمر: New-Item -Path $Profile.CurrentUserCurrentHost.

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