لماذا لا تعمل البرامج النصية PowerShell الخاصة بي؟

StackOverflow https://stackoverflow.com/questions/10635

  •  08-06-2019
  •  | 
  •  

سؤال

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

إنه موجود في دليل البرامج النصية في طريقي.

Cannot be loaded because the execution of scripts is disabled on this system. 
please see "get-help about-signing".

لقد بحثت في المساعدة، لكنها أقل من مفيدة.

هل كانت مفيدة؟

المحلول

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

حاول كتابة هذا:

set-executionpolicy remotesigned

سيؤدي ذلك إلى إخبار PowerShell بالسماح بتشغيل البرامج النصية المحلية (أي على محرك أقراص محلي) غير الموقعة.

ثم حاول تنفيذ البرنامج النصي الخاص بك مرة أخرى.

نصائح أخرى

أنت بحاجة للتشغيل Set-ExecutionPolicy:

Set-ExecutionPolicy Restricted <-- Will not allow any powershell scripts to run.  Only individual commands may be run.

Set-ExecutionPolicy AllSigned <-- Will allow signed powershell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Allows unsigned local script and signed remote powershell scripts to run.

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run.  Warns before running downloaded scripts.

Set-ExecutionPolicy Bypass <-- Nothing is blocked and there are no warnings or prompts.

يستخدم:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

استخدم دائمًا الأمر أعلاه لتمكين تنفيذ PowerShell في الجلسة الحالية.

تمكنت من تجاوز هذا الخطأ عن طريق استدعاء PowerShell مثل هذا:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

أي أنني أضفت -executionpolicy bypass إلى الطريقة التي استدعيت فيها البرنامج النصي.

لقد نجح هذا على نظام التشغيل Windows 7 Service Pack 1.أنا جديد في استخدام PowerShell، لذلك قد تكون هناك محاذير للقيام بذلك لست على علم بها.

[تحرير 26-06-2017] لقد واصلت استخدام هذه التقنية على أنظمة أخرى بما في ذلك Windows 10 وWindows 2012 R2 دون مشكلة.

هذا ما أستخدمه الآن.هذا يمنعني من تشغيل البرنامج النصي عن طريق الخطأ من خلال النقر عليه.عندما أقوم بتشغيله في المجدول أقوم بإضافة وسيطة واحدة:"المجدول" والذي يتجاوز الموجه.

يؤدي هذا أيضًا إلى إيقاف النافذة مؤقتًا في النهاية حتى أتمكن من رؤية مخرجات PowerShell.

if NOT "%1" == "scheduler" (
   @echo looks like you started the script by clicking on it.
   @echo press space to continue or control C to exit.
   pause
)

C:
cd \Scripts

powershell -executionpolicy bypass -File .\rundps.ps1

set psexitcode=%errorlevel%

if NOT "%1" == "scheduler" (
   @echo Powershell finished.  Press space to exit.
   pause
)

exit /b %psexitcode%
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

كان الأمر أعلاه يعمل بالنسبة لي حتى في حالة حدوث الخطأ التالي:

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.

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

.\scriptname.ps1

الامر set-executionpolicy unrestricted سيسمح بتشغيل أي برنامج نصي تقوم بإنشائه كمستخدم قام بتسجيل الدخول.فقط تأكد من ضبط إعداد سياسة التنفيذ مرة أخرى على التوقيع باستخدام set-executionpolicy signed الأمر قبل تسجيل الخروج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top