الصفحة الرئيسية » howto » كيفية تكوين ويندوز للعمل مع برامج نصية PowerShell بسهولة أكبر

    كيفية تكوين ويندوز للعمل مع برامج نصية PowerShell بسهولة أكبر

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

    كيف ولماذا يمنع Windows & PowerShell تنفيذ البرنامج النصي.

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

    Get-ChildItem "$ env: SystemDrive \" -Recurse -ErrorAction SilentlyContinue | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue

    لا تقم بتشغيل الأمر أعلاه!

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

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

    • لا يسمح PowerShell بتنفيذ البرنامج النصي الخارجي بشكل افتراضي.
      يمنع الإعداد ExecutionPolicy في PowerShell تنفيذ البرامج النصية الخارجية بشكل افتراضي في كافة إصدارات Windows. في بعض إصدارات Windows ، لا يسمح الإعداد الافتراضي بتنفيذ البرنامج النصي على الإطلاق. لقد أوضحنا لك كيفية تغيير هذا الإعداد في كيفية السماح بتنفيذ برامج نصية PowerShell على Windows 7 ، ولكننا سنغطيها على مستويات قليلة هنا أيضًا.
    • لا يرتبط PowerShell بملحق الملف .PS1 بشكل افتراضي.
      قدمنا ​​هذا في البداية في سلسلة دروس PowerShell Geek. يقوم Windows بتعيين الإجراء الافتراضي لملفات .PS1 لفتحها في برنامج Notepad ، بدلاً من إرسالها إلى مترجم أوامر PowerShell. هذا لمنع التنفيذ غير المقصود للنصوص البرمجية الضارة عندما يتم النقر عليها ببساطة.
    • لن تعمل بعض النصوص البرمجية لـ PowerShell بدون أذونات المسؤول.
      حتى مع تشغيل حساب على مستوى المسؤول ، ما زلت بحاجة إلى الحصول على التحكم في حساب المستخدم (UAC) لتنفيذ إجراءات معينة. بالنسبة لأدوات سطر الأوامر ، يمكن أن يكون ذلك مرهقًا قليلاً على أقل تقدير. لا نريد تعطيل UAC ، لكنه لا يزال لطيفًا عندما نتمكن من تسهيل التعامل معه.

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

    تغيير اقتران ملف .PS1.

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

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

    يتم تخزين إعدادات التسجيل التي تتحكم في كيفية فتح البرامج النصية PowerShell في الموقع التالي:

    HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ شل

    لاستكشاف هذه الإعدادات قبل أن نغيرها ، ألقي نظرة على هذا المفتاح ومفاتيحه الفرعية مع Regedit. يجب أن يكون لمفتاح Shell قيمة واحدة فقط ، "(افتراضي)" ، والتي تم تعيينها على "فتح". هذا مؤشر للإجراء الافتراضي للنقر المزدوج على الملف ، والذي سنراه في المفاتيح الفرعية.

    قم بتوسيع المفتاح Shell ، وسترى ثلاثة مفاتيح فرعية. يمثل كل من هذه الإجراءات إجراء يمكنك تنفيذه ويكون محددًا في البرامج النصية لـ PowerShell.

    يمكنك توسيع كل مفتاح لاستكشاف القيم داخل ، ولكنها تساوي بشكل أساسي مع الإعدادات الافتراضية التالية:

    • 0 - تشغيل مع PowerShell. "Run with PowerShell" هو في الواقع اسم خيار موجود بالفعل في قائمة السياق للنصوص البرمجية PowerShell. يتم سحب النص من موقع آخر بدلاً من استخدام اسم المفتاح مثل الآخرين. ولا يزال هذا الإجراء الافتراضي غير مزدوج.
    • تحرير - فتح في PowerShell ISE. هذا يجعل أكثر منطقية من المفكرة ، ولكن لا يزال لديك النقر بزر الماوس الأيمن فوق الملف .PS1 للقيام بذلك بشكل افتراضي.
    • فتح - فتح في المفكرة. لاحظ أن اسم المفتاح هذا هو أيضًا السلسلة المخزنة في القيمة "(افتراضي)" لمفتاح Shell. وهذا يعني أن النقر المزدوج على الملف سيؤدي إلى "فتح" ، ويتم تعيين هذا الإجراء عادةً على استخدام "المفكرة".

    إذا كنت تريد التمسك بسلاسل الأوامر سابقة الإعداد المتاحة بالفعل ، يمكنك فقط تغيير القيمة "(افتراضي)" في المفتاح Shell لمطابقة اسم المفتاح الذي يطابق ما تريد النقر المزدوج عليه. يمكن القيام بذلك بسهولة من داخل Regedit ، أو يمكنك استخدام الدروس المستفادة من البرنامج التعليمي الخاص بنا حول استكشاف السجل باستخدام PowerShell (بالإضافة إلى قرص PSDrive صغير) لبدء إنشاء برنامج نصي قابل لإعادة الاستخدام يمكنه تكوين الأنظمة الخاصة بك. يجب تشغيل الأوامر التالية من جلسة PowerShell مرتفعة ، تشبه تشغيل CMD كمسؤول.

    أولاً ، ستحتاج إلى تهيئة PSDrive لـ HKEY_CLASSES_ROOT نظرًا لعدم إعداد هذا الإعداد بشكل افتراضي. الأمر لهذا هو:

    سجل PSDrive الجديد HKCR HKEY_CLASSES_ROOT

    يمكنك الآن التنقل في مفاتيح وقيم التسجيل وتعديلها في HKEY_CLASSES_ROOT تمامًا كما تفعل في HKCU و HKLM PSDrives.

    لتكوين نقرة مزدوجة لتشغيل برامج نصية PowerShell مباشرة:

    Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Default)' 0

    لتكوين نقرة مزدوجة لفتح البرامج النصية لـ PowerShell في PowerShell ISE:

    Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Default) "Edit"

    لاستعادة القيمة الافتراضية (يتم تعيين النقر المزدوج لفتح البرامج النصية لـ PowerShell في برنامج Notepad):

    Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Default) "Open"

    هذا فقط أساسيات تغيير إجراء النقر المزدوج الافتراضي. سنشرح المزيد من التفاصيل حول تخصيص كيفية معالجة النصوص البرمجية لـ PowerShell عند فتحها في PowerShell من Explorer في القسم التالي. ضع في اعتبارك أن scoping يمنع PSDrives من الاستمرار عبر جلسات العمل. لذا ، قد ترغب في تضمين سطر New-PSDrive عند بدء أي برنامج توصيف للتكوين تقوم بإنشائه لهذا الغرض ، أو إضافته إلى ملف تعريف PowerShell الخاص بك. بخلاف ذلك ، ستحتاج إلى تشغيل هذا الجزء يدويًا قبل محاولة إجراء تغييرات بهذه الطريقة.

    تغيير إعداد PowerShell ExecutionPolicy.

    يعد PowerShell's ExecutionPolicy طبقة أخرى من الحماية ضد تنفيذ البرامج النصية الضارة. هناك العديد من الخيارات لهذا ، وطريقتان مختلفتان يمكن ضبطهما. من الأكثر إلى الأقل أمانًا ، فإن الخيارات المتاحة هي:

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

    كما هو موضح في وصف غير محدد ، يمكن تعيين السياسات الواردة أعلاه في نطاق أو أكثر من نطاقات متعددة. يمكنك استخدام Get-ExecutionPolicy ، باستخدام المعلمة -List ، لمشاهدة جميع النطاقات وتكوينها الحالي.

    يتم سرد النطاقات في ترتيب الأسبقية ، مع تجاوز النطاق المحدد الأعلى جميع الآخرين. إذا لم يتم تحديد أي سياسات ، فسيعود النظام إلى الإعداد الافتراضي الخاص به (في معظم الحالات ، يكون هذا مقيَّدًا).

    • يمثل MachinePolicy سياسة المجموعة السارية على مستوى الكمبيوتر. يتم تطبيق هذا بشكل عام فقط في مجال ، ولكن يمكن القيام به محليًا أيضًا.
    • يمثل UserPolicy "نهج المجموعة" ساري المفعول على المستخدم. هذا عادة ما يستخدم فقط في بيئات الشركات.
    • العملية عبارة عن نطاق خاص بهذا المثيل من PowerShell. لن تؤثر التغييرات التي يتم إجراؤها على السياسة في هذا النطاق على عمليات PowerShell الأخرى ، ولن تكون فعالة بعد إنهاء هذه الجلسة. يمكن تكوين هذا بواسطة المعلمة -ExecutionPolicy عند تشغيل PowerShell ، أو يمكن تعيينه مع بناء جملة Set-ExecutionPolicy المناسبة من داخل الجلسة.
    • يعد CurrentUser نطاقًا تم تكوينه في السجل المحلي وينطبق على حساب المستخدم المستخدم لتشغيل PowerShell. يمكن تعديل هذا النطاق مع Set-ExecutionPolicy.
    • LocalMachine هو نطاق تم تكوينه في السجل المحلي وتطبيقه على جميع المستخدمين على النظام. هذا هو النطاق الافتراضي الذي تم تغييره إذا تم تشغيل Set-ExecutionPolicy دون المعلمة -Scope. كما أنه ينطبق على جميع المستخدمين على النظام ، لا يمكن تغييره إلا من جلسة مرتفعة.

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

    للاحتفاظ ببعض التوازن بين الأمان وسهولة الاستخدام ، من المحتمل أن تكون السياسة الموضحة في لقطة الشاشة هي الأفضل. يؤدي تعيين سياسة LocalMachine إلى "مقيد" بشكل عام إلى منع تشغيل البرامج النصية بواسطة أي شخص آخر غيرك. بالطبع ، يمكن تجاوز هذا من قبل المستخدمين الذين يعرفون ما يفعلونه دون بذل الكثير من الجهد. ولكن يجب أن تبقي أي مستخدمين غير متمرسين على التقنية دون قصد في إطلاق شيء كارثي في ​​PowerShell. إن ضبط CurrentUser (أي: أنت) يتيح لك Unrestricted تنفيذ البرامج النصية يدويًا من سطر الأوامر بالطريقة التي تريدها ، ولكنه يحتفظ بتذكير بالحذر للبرامج النصية التي تم تنزيلها من الإنترنت. يجب أن يتم إعداد RemoteSigned على مستوى العملية باختصار إلى PowerShell.exe أو (كما سنفعل أدناه) في قيم السجل التي تتحكم في سلوك البرامج النصية لـ PowerShell. سيسمح ذلك بسهولة وظيفة النقر المزدوج للنقر لأي نصوص تكتبها ، مع وضع حاجز أقوى ضد التنفيذ غير المقصود للنصوص البرمجية (التي قد تكون ضارة) من مصادر خارجية. نريد أن نفعل ذلك هنا لأنه أسهل بكثير أن تنقر نقرًا مزدوجًا بطريق الخطأ على أحد البرامج النصية بشكلٍ عام ، وهو عادة ما يُطلق عليه اسمًا يدويًا من جلسة تفاعلية.

    لتعيين سياسات CurrentUser و LocalMachine كما في لقطة الشاشة أعلاه ، قم بتشغيل الأوامر التالية من جلسة PowerShell مرتفعة:

    Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser

    لفرض سياسة RemoteSigned على البرامج النصية التي يتم تشغيلها من Explorer ، سيتعين علينا تغيير قيمة داخل أحد مفاتيح التسجيل التي كنا ننظر إليها في وقت سابق. هذا مهم بشكل خاص لأنه ، اعتماداً على إصدار PowerShell أو Windows الخاص بك ، قد يكون التكوين الافتراضي لتجاوز كافة إعدادات ExecutionPolicy عدا AllSigned. لمعرفة ما هو التكوين الحالي للكمبيوتر الخاص بك ، يمكنك تشغيل هذا الأمر (التأكد من أنه تم تعيين HKCR PSDrive أولاً):

    Get HKProductty GetPro: \ Microsoft.PowerShellScript.1 \ Shell \ Command | اختيار كائن "(افتراضي)"

    من المحتمل أن يكون تهيئتك الافتراضية واحدة من السلسلتين التاليتين ، أو شيء مشابه إلى حد ما:

    (المشاهدة على Windows 7 SP1 x64 ، مع الإصدار PowerShell 2.0)

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-file" "٪ 1"

    (المشاهدة على Windows 8.1 x64 ، مع الإصدار 4.0 من PowerShell)

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "if ((Get-ExecutionPolicy) -ne 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass؛ & '٪ 1 "

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

    لتعيين ExecutionPolicy على مستوى العملية للنصوص التي تم تشغيلها من Explorer ، بما يتوافق مع لقطة الشاشة أعلاه ، ستحتاج إلى تعديل نفس قيمة السجل التي استعلمنا عنها للتو. يمكنك القيام بذلك يدويا في Regedit ، عن طريق تغييره إلى هذا:

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-ExecutionPolicy" "RemoteSigned" "-file" "٪ 1"

    يمكنك أيضًا تغيير الإعداد من داخل PowerShell إذا كنت تفضل ذلك. تذكر أن تفعل ذلك من جلسة مرتفعة ، مع تعيين HKCR PSDrive.

    Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command '(Default) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" -ExecutionPolicy "" RemoteSigned "" -file "" ٪ 1 ""

    تشغيل البرامج النصية PowerShell كمسؤول.

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

    للقيام بذلك في Regedit ، ارجع إلى مفتاح Shell ، في:

    HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ شل

    هناك ، إنشاء مفتاح فرعي جديد. يطلق عليه "تشغيل مع PowerShell (المشرف)". تحت ذلك ، قم بإنشاء مفتاح فرعي آخر يسمى "الأوامر". ثم قم بتعيين القيمة "(افتراضي)" تحت أمر إلى هذا:

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File \ "٪ 1 \"' -Verb RunAs  "

    سيحتاج فعل الشيء نفسه في PowerShell فعليًا إلى ثلاثة أسطر في هذا الوقت. واحد لكل مفتاح جديد ، والآخر لتعيين قيمة "(افتراضي)" للأمر. لا ننسى الارتفاع ورسم خرائط HKCR.

    عنصر جديد 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run مع PowerShell (Admin)' New-Item 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run مع PowerShell (Admin) \ Command' Set-ItemProperty ' HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run مع PowerShell (Admin) \ Command "(افتراضي)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" &  Start-Process PowerShell.exe -ArgumentList "-ExecutionPolicy RemoteSigned -File \"٪ 1 \ "" - فعل RunAs ""

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

    الآن يجب أن يكون لديك إدخال قائمة سياقات جديدة لبرامج PowerShell النصية ، تسمى "Run with PowerShell (Admin)".

    سوف يقوم الخيار الجديد بإنشاء حالتين PowerShell متتاليتين. الأولى هي مجرد قاذفة للثانية ، والتي تستخدم Start-Process مع المعلمة "-Verb RunAs" لطلب الارتفاع للجلسة الجديدة. من هناك ، يجب أن يكون البرنامج النصي قادراً على التشغيل مع امتيازات المسؤول بعد النقر عبر مطالبة UAC.

    اللمسات الأخيرة.

    هناك فقط بضعة أقراص أخرى يمكن أن تساعد في جعل الحياة أسهل قليلاً. لأحد ، ماذا عن التخلص من وظيفة المفكرة بالكامل؟ ما عليك سوى نسخ القيمة "(Default)" من مفتاح Command ضمن تحرير (أدناه) ، إلى نفس الموقع ضمن Open.

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe" "٪ 1"

    أو يمكنك استخدام هذا الجزء من PowerShell (مع Admin & HKCR بالطبع):

    Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Open \ Command '(Default) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe ""٪ 1 "'

    هناك إزعاج ثانوي آخر هو اختفاء وحدة التحكم بمجرد اكتمال النص البرمجي. عندما يحدث ذلك ، ليس لدينا أي فرصة لمراجعة إخراج البرنامج النصي عن الأخطاء أو المعلومات المفيدة الأخرى. يمكن الاعتناء بهذا عن طريق وضع توقف مؤقت في نهاية كل نصوصك ، بالطبع. بدلاً من ذلك ، يمكننا تعديل القيم "(افتراضي)" لمفاتيح الأوامر الخاصة بنا لتضمين معلمة "-NoExit". فيما يلي القيم المعدلة.

    (بدون دخول المشرف)

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" "-file" "٪ 1"

    (مع وصول المشرف)

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Start-Process PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File \ "٪ 1 \"' - الفعل RunAs "

    وبالطبع ، سنعطيك تلك الموجودة في أوامر PowerShell أيضًا. آخر تذكير: Elevation & HKCR!

    (غير مسؤول)

    Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command '(Default) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" -NoExit "" -ExecutionPolicy "" RemoteSigned "" -file ""٪ 1 ""

    (مشرف)

    "HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run Set-ItemProperty 'مع PowerShell (Admin) \ Command" (افتراضي) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" -العقود " "" & "Start-Process PowerShell.exe -ArgumentList" -NoExit -ExecutionPolicy RemoteSigned -File \ "٪ 1 \" "- Verb RunAs" "

    أخذها من أجل دوران.

    لاختبار ذلك ، سنستخدم برنامجًا نصيًا يمكن أن يعرض إعدادات ExecutionPolicy في المكان وما إذا تم تشغيل البرنامج النصي باستخدام أذونات المسؤول أم لا. سيتم تسمية البرنامج النصي باسم "MyScript.ps1" ويتم تخزينه في "D: \ Script Lab" على نظام العينة لدينا. الرمز أدناه ، كمرجع.

    if (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ([Security.Principal.WindowsBuiltInRole] "Administrator")) كتابة - إخراج "قيد التشغيل كمسؤول!" آخر Write-Output 'Running Limited!' Get-ExecutionPolicy -List

    باستخدام الإجراء "Run with PowerShell":

    باستخدام الإجراء "Run with PowerShell (Admin)" ، بعد النقر عبر UAC:

    لإثبات تنفيذ ExecutionPolicy في نطاق العملية ، يمكننا جعل Windows يعتقد أن الملف جاء من الإنترنت باستخدام هذا الجزء من رمز PowerShell:

    Add-Content-Path "D: \ Script Lab \ MyScript.ps1 '-Value" [ZoneTransfer]' nZoneId = 3 "-Stream 'Zone.Identifier'

    لحسن الحظ ، كان لدينا -NoExit تمكين. وإلا ، فإن هذا الخطأ قد تم توقيفه فقط ، ولن نكون على علم به!

    يمكن إزالة Zone.Identifier مع هذا:

    مسح المحتوى -Path 'D: \ Script Lab \ MyScript.ps1' -Stream 'Zone.Identifier'

    مراجع مفيدة:

    • تشغيل البرامج النصية PowerShell من ملف دفعي - مدونة البرمجة دانيال شرودر
    • التحقق من أذونات المسؤول في PowerShell - Hey، Scripting Guy! مدونة