سؤال

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

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

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

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

المحلول

احفظ البرنامج النصي الخاص بك كملف .ps1 وقم بتشغيله باستخدام powershell.exe، مثل هذا:

powershell.exe .\foo.ps1

تأكد من تحديد المسار الكامل للبرنامج النصي، وتأكد من تعيين مستوى سياسة التنفيذ لديك على الأقل "RemoteSigned" حتى يمكن تشغيل البرامج النصية المحلية غير الموقعة.

نصائح أخرى

من http://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspx

إذا كنت على استعداد لتلطيخ نص PowerShell الجميل باستخدام القليل من CMD، فيمكنك استخدام خدعة PowerShell-CMD متعددة اللغات.احفظ برنامج PowerShell النصي كملف .CMD، ثم ضع هذا السطر في الأعلى:

@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %*);'+[String]::Join(';',(Get-Content '%~f0') -notmatch '^^@PowerShell.*EOF$')) & goto :EOF

إذا كنت بحاجة إلى دعم الوسائط المقتبسة، فهناك إصدار أطول، والذي يسمح أيضًا بالتعليقات.(لاحظ خدعة التعليق غير العادية لـ CMD المتمثلة في double@).

@@:: This prolog allows a PowerShell script to be embedded in a .CMD file.
@@:: Any non-PowerShell content must be preceeded by "@@"
@@setlocal
@@set POWERSHELL_BAT_ARGS=%*
@@if defined POWERSHELL_BAT_ARGS set POWERSHELL_BAT_ARGS=%POWERSHELL_BAT_ARGS:"=\"%
@@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %POWERSHELL_BAT_ARGS%);'+[String]::Join(';',$((Get-Content '%~f0') -notmatch '^^@@'))) & goto :EOF

مصدر للحصول على إجابة مات.

يمكنني تشغيله عن طريق النقر المزدوج فوق الملف عن طريق إنشاء ملف دفعي يحتوي على ما يلي:

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe LocationOfPS1File

تشغيل البرنامج النصي تلقائيًا من برنامج نصي آخر (على سبيل المثال.ملف دفعي)

كما اقترح مات هاميلتون، ما عليك سوى إنشاء البرنامج النصي PowerShell .ps1 الخاص بك واستدعائه باستخدام:

PowerShell C:\Path\To\YourPowerShellScript.ps1

أو إذا كان دليل العمل الخاص بالملف الدفعي الخاص بك هو نفس الدليل الموجود فيه البرنامج النصي PowerShell، فيمكنك استخدام مسار نسبي:

PowerShell .\YourPowerShellScript.ps1

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


تشغيل البرنامج النصي يدويًا الطريقة الأولى

أنت تستطيع راجع مشاركة مدونتي لمزيد من المعلومات, ، ولكن قم بشكل أساسي بإنشاء ملف البرنامج النصي PowerShell .ps1 الخاص بك للقيام بما تريد، ثم قم بإنشاء ملف دفعي .cmd في نفس الدليل واستخدم ما يلي لمحتويات الملف:

@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"

استبدال MyPowerShellScript.ps1 في السطر الثالث باسم ملف البرنامج النصي PowerShell الخاص بك.

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

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


تشغيل البرنامج النصي يدويًا الطريقة الثانية

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

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

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

Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy RemoteSigned -Force' -Verb RunAs

Set-ExecutionPolicy RemoteSigned -Force هو الأمر الذي يغير سياسة التنفيذ فعليًا؛هذا يحدده التوقيع عن بعد, ، لذا يمكنك تغيير ذلك إلى شيء آخر إذا كنت بحاجة إلى ذلك.أيضًا، سيقوم هذا السطر تلقائيًا بتشغيل PowerShell كمسؤول لك، وهو أمر مطلوب لتغيير سياسة التنفيذ.

يمكنك استخدام هذا الأمر:powershell.exe -الوسيطة c:\scriptPath\Script.ps1

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