كيفية تشغيل نص PowerShell من سطر الأوامر والمزيد

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

المتطلبات

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

  • A Windows 10 computer with Administrator privileges.
  • نظام التشغيل Windows بإصدار PowerShell 5 أو أعلى. يمكنك أيضًا استخدام PowerShell v7. سيتم التركيز في هذا البرنامج التعليمي على PowerShell لنظام التشغيل Windows نظرًا لأنه مضمن في نظام التشغيل Windows.
  • أي محرر نص

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

إذا كانت هذه هي المرة الأولى التي تحاول فيها تنفيذ سكريبت PowerShell لنظام التشغيل Windows، فقد تواجه مشكلة شائعة. قد يُعيد PowerShell رسالة خطأ تشير إلى أن السكريبت “لا يمكن تحميله لأن تشغيل السكريبتات معطل على هذا النظام”.

PS> .\GetServices.ps1
 File C:\Temp\GetServices.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at
 https:/go.microsoft.com/fwlink/?LinkID=135170.
 At line:1 char:1
 .\GetServices.ps1
 ~~~~~ CategoryInfo          : SecurityError: (:) [], PSSecurityException
 FullyQualifiedErrorId : UnauthorizedAccess   

PowerShell تعيد الرسالة الخطأ أعلاه عند محاولة تشغيل PowerShell مع تعيين سياسة تنفيذ إلى Restricted، Remote Signed أو All Signed.

Restricted

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

لا يزال بإمكانك تنفيذ أوامر فردية في الطرفية، ولكن ليس ملف سكربت. يتضمن القيد أي ملف ينتهي بامتداد .ps1xml، .psm1 أو .ps1.

Unrestricted

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

Remote Signed

تسمح سياسة التوقيع البعيد بتشغيل أي سكربت إما (أ) موقع رقميًا أو (ب) أي سكربت كتبته على جهاز الكمبيوتر المحلي سواء كان لديه توقيع أم لا.

إذا كان السكربت تم تنزيله من الإنترنت وليس موقعًا، فيجب عليك فتح الملف. يمكنك القيام بذلك عن طريق النقر بزر الماوس الأيمن فوق الملف واختيار الخصائص. أو يمكنك استخدام cmdlet PowerShell Unblock-File لذلك الملف السكربتي الخاص.

استخدام سياسة التوقيع البعيد سيكون خيارًا مثاليًا عند تشغيل سكربت تم تنزيله من الإنترنت.

All Signed

يتطلب التوقيع الكلي توقيع جميع السكربتات رقميًا من قبل ناشر موثوق به. وهذا يشمل السكربتات التي تم تنزيلها من الإنترنت والتي تم كتابتها محليًا على جهاز الكمبيوتر الخاص بك.

تغيير سياسة تنفيذ PowerShell

لتغيير سياسة التنفيذ:

  1. افتح Windows PowerShell بصلاحيات المسؤول Run as Administrator للتأكد من أن لديك أعلى صلاحيات لإجراء تغييرات في السياسة.
Search PowerShell in Start Menu

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

نظرًا لأن هذا البرنامج التعليمي يفترض أنك قمت بتنزيل ملف النص GetServices.ps1 من الإنترنت، قم بضبط سياسة التنفيذ على RemoteSigned.

PS> Set-ExecutionPolicy RemoteSigned

تفرض سياسة التنفيذ RemoteSigned عليك توقيع النص بشكل تشفيري لكل سكريبت PowerShell يتم تنزيله من الإنترنت قبل أن يتم تشغيله على نظامك.

3. يجب أن تظهر إخراجًا يطلب تأكيد الإجراء. أدخل Y واضغط على enter لتأكيد تغيير السياسة.

Execution Policy Change
 The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the
 security risks described in the about_Execution_Policies help topic at https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to
 change the execution policy?
 [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): 

في هذه النقطة، اتبع الخطوات التالية لاستكشاف طرق مختلفة لتشغيل سكريبت PowerShell على جهاز الكمبيوتر الخاص بك.

كيفية تشغيل سكريبت PowerShell

لعرض تشغيل نص PowerShell، تحتاج فعلاً إلى ملف نصي لتشغيله! إذا لم يكن لديك واحد متاحًا، قم بتنزيل هذا الملف المضغوط واستخرج ملف PS1 من الداخل. ستجد ملف نصي بسيط يسمى GetServices.ps1.

Write-Output "Listing Computer Services"
Get-Service

يجب أن ينتهي كل نص PowerShell بامتداد .ps1.

استخدام وحدة التحكم

بمجرد أن يكون لديك نص جاهز، هناك عدة طرق مختلفة يمكنك من خلالها تنفيذ ملف نص PowerShell. واحدة من أكثر الطرق شيوعًا هي من خلال وحدة التحكم PowerShell.

للقيام بذلك:

  1. افتح وحدة التحكم PowerShell كما هو موضح أعلاه.

2. انتقل إلى موقع النظام لحفظ النص الذي تريد تشغيله باستخدام الأمر Set-Location PowerShell أو الاسم المستعار cd. يتواجد النص في دليل C:\Temp في هذا البرنامج التعليمي.

PS> cd C:\Temp\

3. قم بتشغيل النص باستخدام علامة النقطة (.). PowerShell هو وحدة تحكم تبحث أيضًا عن أسماء الأوامر. للتمييز بين أمر PowerShell ونص، يجب عليك استخدام نقطة قبل النص. تمثل هذه النقطة الدليل الحالي.

 PS> .\GetServices.ps1

كيفية تشغيل نص PowerShell من سطر الأوامر عبر موقع PowerShell

إذا لم تتمكن أو تفضل عدم تشغيل النصوص عبر وحدة التحكم PowerShell، يمكنك أيضًا فعل ذلك عبر سطر الأوامر الجيد القديم (موجه الأوامر).

لتشغيل النصوص عبر سطر الأوامر، يجب عليك أولاً تشغيل برنامج PowerShell (powershell.exe)، مع موقع PowerShell الموجود في C:\Program Files\WindowsPowerShell\powershell.exe ثم تمرير مسار النص كمعامل له.

يمكنك تشغيل النصوص مع المعاملات في أي سياق ببساطة عن طريق تحديد المعاملات أثناء تشغيل برنامج PowerShell كما في powershell.exe -Parameter 'Foo' -Parameter2 'Bar'.

عندما تفتح cmd.exe، يمكنك تنفيذ نص PowerShell كما يلي. هذا المثال يقوم بتشغيل المحرك وتمرير مسار النص C:\Temp\GetServices.ps1.

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

CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"

يستخدم موقع PowerShell لـ PowerShell 7 ملفًا قابلًا للتنفيذ مختلفًا يسمى pwsh.exe والموجود عادة في C:\Program Files\PowerShell\7\pwsh.exe.

أدناه فيديو مفيد على YouTube يغطي تنفيذ نص عبر ملف دفعي يقوم بتنفيذ cmd.exe.

استخدام PowerShell ISE

إذا قمت بإنشاء نصوصك الخاصة أو تحرير نصوص الآخرين، فمن المحتمل أنك ستستخدم محرر نصوص مثل PowerShell ISE أو ربما Visual Studio (VS) Code. نظرًا لأن ISE متضمن في نظام التشغيل Windows، دعنا نركز على ذلك في هذا البرنامج التعليمي.

لاستدعاء نص برمجي عبر بيئة التطوير المتكاملة:

  1. انتقل إلى قائمة “ابدأ”، ابحث عن PowerShell ISE وافتحها.
Search PowerShell ISE in Start Menu

2. انقر على ملففتح وابحث عن النص البرمجي الخاص بك.

Open Script using File Menu

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

Run Script using PowerShell ISE

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

A PowerShell script can sometimes return output. This happens when the script you’re executing is built to return objects which is a fundamental component of PowerShell.

إذا قمت بتشغيل النص البرمجي العيني GetServices.ps1، سترى التالي. يقوم هذا النص بتشغيل أمر Get-Service الذي يعيد جميع الخدمات المثبتة على جهاز الكمبيوتر الخاص بك الذي يعمل بنظام التشغيل Windows.

PS> .\GetScripts.ps1
Listing Computer Services
Status   Name               DisplayName
------   ----               -----------
Running  aakore             Acronis Agent Core Service
Stopped  AarSvc_1b668d      Agent Activation Runtime_1b668d
Running  AcronisActivePr... Acronis Active Protection Service
Running  AcronisCyberPro... Acronis Cyber Protection Service
Running  AcrSch2Svc         Acronis Scheduler2 Service
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AdobeUpdateService AdobeUpdateService
Running  AGMService         Adobe Genuine Monitor Service
Running  AGSService         Adobe Genuine Software Integrity Se...
----Truncated----

تشغيل نص برمجي PowerShell من داخل نص برمجي آخر

لنفترض أن لديك نصين برمجيين وترغب في استدعاء أحدهما من الآخر. ربما لديك نص برمجي يسمى GetUser.ps1 وآخر يسمى ResetPassword.ps1. داخل نص GetUser.ps1، ترغب في تنفيذ نص ResetPassword.ps1 لإعادة تعيين كلمة مرور مستخدم.

في داخل النص الذي يستدعي (GetUser.ps1)، يمكنك إضافة سطر لتنفيذ النص الآخر تمامًا كما تقوم بدعوة النص من سطر الأوامر.

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

لتشغيل النص الآخر في جلسة جديدة
powershell.exe .\ResetPassword.ps1
لتشغيل النص الآخر في نفس الجلسة
.\ResetPassword.ps1

Source:
https://adamtheautomator.com/run-powershell-script/