9Sep
لعدة أسباب، ومعظمها تتعلق بالأمن، والبرامج النصية بويرشيل ليست سهلة الحمل وقابلة للاستخدام بسهولة كما يمكن أن تكون البرامج النصية دفعة.ومع ذلك، يمكننا تجميع حزمة النصي مع البرامج النصية بويرشيل لدينا للتغلب على هذه القضايا.هنا، سنعرض لك بعض هذه المشكلات، وكيفية إنشاء نص برمجي للتدفق حولها.
لماذا لا يمكنني نسخ ملف. PS1 الخاص بي إلى كمبيوتر آخر وتشغيله؟
ما لم يكن قد تم تكوين النظام المستهدف مسبقا للسماح بتشغيل البرامج النصية التعسفية، مع الامتيازات المطلوبة، واستخدام الإعدادات الصحيحة، وهناك احتمالات سوف تواجه بعض المشاكل عند محاولة القيام بذلك.
- لا يرتبط بويرشيل ملحق الملف. PS1 بشكل افتراضي.
جلبنا هذا في البداية في لدينا سلسلة بويرشيل المهوس المدرسة.ملفات ويندوز. PS1 إلى المفكرة بشكل افتراضي، بدلا من إرسالها إلى مترجم الأمر بويرشيل.هذا هو لمنع التنفيذ العرضي من البرامج النصية الخبيثة ببساطة عن طريق النقر المزدوج عليها.هناك طرق يمكنك من خلالها تغيير هذا السلوك، ولكن من المحتمل أن لا شيء تريد القيام به على كل جهاز كمبيوتر كنت تحمل النصوص الخاصة بك في جميع أنحاء ل- خاصة إذا كان بعض هذه الحواسيب ليست الخاصة بك. - لا يسمح بويرشيل بتنفيذ البرنامج النصي الخارجي بشكل افتراضي.
يمنع الإعداد إيكسكوتيونبوليسي في بويرشيل تنفيذ البرامج النصية الخارجية بشكل افتراضي في كافة إصدارات ويندوز.في بعض إصدارات ويندوز، الافتراضي لا يسمح تنفيذ البرنامج النصي على الإطلاق.أظهرنا لك كيفية تغيير هذا الإعداد في كيفية السماح بتنفيذ البرامج النصية بويرشيل على ويندوز 7. ومع ذلك، وهذا هو أيضا شيء كنت لا تريد أن تفعل على أي جهاز كمبيوتر فقط. - لن تعمل بعض البرامج النصية بويرشيل بدون أذونات المسؤول.
حتى يعمل مع حساب على مستوى المسؤول، لا تزال تحتاج إلى الحصول من خلال التحكم في حساب المستخدم( واك) لتنفيذ إجراءات معينة.نحن لا نريد لتعطيل هذا، لكنه لا يزال لطيفا عندما يمكننا أن نجعل من الأسهل قليلا للتعامل معها. - قد يكون لدى بعض المستخدمين بيئات بويرشيل مخصصة.
ربما لن يتم تشغيل هذا في كثير من الأحيان، ولكن عندما تفعل ذلك يمكن أن تجعل تشغيل واستكشاف الأخطاء وإصلاحها النصوص الخاصة بك محبط قليلا.لحسن الحظ، يمكننا الحصول على هذا دون إجراء أي تغييرات دائمة أيضا.
الخطوة 1: انقر نقرا مزدوجا فوق للتشغيل.
دعونا نبدأ بمعالجة المشكلة الأولى - اقترانات الملف. PS1.لا يمكنك النقر نقرا مزدوجا فوق لتشغيل ملفات. PS1، ولكن يمكنك تنفيذ ملف. BAT بهذه الطريقة.لذلك، سوف نكتب ملف دفعي لاستدعاء البرنامج النصي بويرشيل من سطر الأوامر بالنسبة لنا.
لذلك ليس لدينا لإعادة كتابة ملف دفعي لكل برنامج نصي، أو في كل مرة نقوم بنقل برنامج نصي حولها، فإنه سيتم الاستفادة من متغير المرجعية الذاتية لبناء مسار الملف للنص بويرشيل.لإجراء هذا العمل، سوف تحتاج إلى وضع ملف دفعي في نفس المجلد النصي بويرشيل ولها نفس اسم الملف.حتى إذا كان البرنامج النصي بويرشيل يسمى "MyScript.ps1"، ستحتاج إلى تسمية ملف الدفعات "MyScript.bat" والتأكد من أنه في نفس المجلد.ثم وضع هذه الأسطر في النص البرمجي دفعة:
ECHO إيقاف PowerShell.exe -Command "& أمب؛ '٪ ~ dpn0.ps1'" بوسإذا لم يكن للقيود الأمنية الأخرى في مكان، وهذا من شأنه أن يكون حقا كلفإنه يأخذ لتشغيل البرنامج النصي بويرشيل من ملف دفعي.في الواقع، فإن السطرين الأول والأخير هما أساسا مسألة تفضيل - إنها السطر الثاني الذي يقوم بهذا العمل.وهنا انهيار:
ECHO إيقاف إيقاف أمر مرددا.هذا فقط يبقي الأوامر الأخرى الخاصة بك من تظهر على الشاشة عند تشغيل ملف الدفعي.هذا الخط هو في حد ذاته مخبأة من قبل استخدام في( @) رمز أمامه.
PowerShell.exe -Command "& أمب؛'٪ ~ dpn0.ps1' " يعمل بالفعل البرنامج النصي بويرشيل.يمكن بالطبع PowerShell.exe يسمى من أي نافذة سمد أو ملف دفعي لإطلاق بويرشيل إلى وحدة التحكم العارية مثل المعتاد.يمكنك أيضا استخدامه لتشغيل الأوامر مباشرة من ملف دفعي، من خلال تضمين المعلمة -Command والوسائط المناسبة.يتم استخدام الطريقة التي يتم استخدامها لاستهداف ملف. PS1 مع المتغير٪ dpn0 الخاص.تشغيل من ملف دفعي،٪ ~ dpn0 يقيم إلى حرف محرك الأقراص ومسار المجلد واسم الملف( بدون ملحق) من ملف الدفعي.نظرا لأن ملف الدفعات والنص البرمجي بويرشيل سيكون في نفس المجلد ويكون له نفس الاسم، سيتم ترجمة٪ ~ dpn0.ps1 إلى مسار الملف الكامل للنص البرمجي بويرشيل.
بوس يتوقف فقط عن تنفيذ الدفعة وينتظر إدخال المستخدم.هذا مفيد عموما أن يكون في نهاية ملفات الدفعات الخاصة بك، بحيث يكون لديك فرصة لمراجعة أي إخراج الأمر قبل أن يختفي الإطار.ونحن نمر من خلال اختبار كل خطوة، وفائدة هذا سوف تصبح أكثر وضوحا.
لذلك، يتم إعداد ملف الدفع الأساسي.لأغراض العرض التوضيحي، يتم حفظ هذا الملف باسم "D: \ سكريبت لاب \ MyScript.bat" وهناك "MyScript.ps1" في نفس المجلد.دعونا نرى ما يحدث عندما نضغط نقرا مزدوجا فوق MyScript.bat.
من الواضح أن البرنامج النصي بويرشيل لم يعمل، ولكن هذا هو متوقع - لقد تناولنا فقط أول من مشاكلنا الأربعة، بعد كل شيء.ومع ذلك، هناك بعض البتات الهامة التي تظهر هنا:
- يظهر عنوان النافذة أن البرنامج النصي الدفعي أطلق بنجاح بويرشيل.
- يظهر السطر الأول من الإخراج أن ملف تعريف بويرشيل مخصص قيد الاستخدام.هذه هي المشكلة المحتملة رقم 4، المذكورة أعلاه.
- توضح رسالة الخطأ قيود إيكسكوتيونبوليسي في الواقع.هذه مشكلتنا # 2.
- يظهر الجزء المسطر من رسالة الخطأ( والذي يتم فعليا بواسطة إخراج الخطأ بويرشيل) أن البرنامج النصي للدفعة كان يستهدف بشكل صحيح النص البرمجي بويرشيل المقصود( D: \ سكريبت لاب \ MyScript.ps1).لذلك نحن على الأقل نعرف أن الكثير يعمل بشكل صحيح.
الملف الشخصي، في هذه الحالة، هو نص برمجي بسيط من سطر واحد يستخدم لهذا العرض لتوليد الإخراج كلما كان الملف الشخصي نشطا.يمكنك تخصيص الشخصية الخاصة بك بويرشيل للقيام بذلك أيضا، إذا كنت ترغب في اختبار هذه البرامج النصية نفسك.ببساطة إضافة السطر التالي إلى البرنامج النصي ملف التعريف الخاص بك:
كتابة المخرجات 'الشخصية بويرشيل الشخصية في الواقع!يتم تعيين إيكسكوتيونبوليسي على نظام الاختبار هنا إلى ريموتسيغند.ويسمح هذا بتنفيذ النصوص البرمجية التي تم إنشاؤها محليا( مثل النص البرمجي للملف الشخصي)، بينما يتم حظر النصوص البرمجية من مصادر خارجية ما لم يتم توقيعها من قبل جهة موثوق بها.لأغراض العرض التوضيحي، تم استخدام الأمر التالي للإعلام MyScript.ps1 بأنه مصدر خارجي:
أد-كونتنت -Path 'D: \ سكريبت لاب \ MyScript.ps1' -Value "[زونيترانزفر]` نزونيد = 3 "-ستريم 'Zone. Identifier'يقوم بتعيين تدفق البيانات البديل Zone. Identifier على MyScript.ps1 بحيث يعتقد ويندوز أن الملف جاء من الإنترنت.يمكن عكسها بسهولة بالأمر التالي:
كلير-كونتنت -Path 'D: \ سكريبت لاب \ MyScript.ps1' -Stream 'Zone. Identifier'الخطوة 2: التجول حول إيكسكوتيونبوليسي.
التنقل حول الإعداد إيكسكوتيونبوليسي، من سمد أو برنامج نصي دفعة، هو في الواقع من السهل جدا.نقوم فقط بتعديل السطر الثاني من البرنامج النصي لإضافة معلمة أخرى إلى الأمر PowerShell.exe.
PowerShell.exe -ExecutionPolicy بايباس -Command "& أمب؛ '٪ ~ dpn0.ps1'"يمكن استخدام المعلمة -ExecutionPolicy لتعديل إيكسكوتيونبوليسي الذي يتم استخدامه عند تفرخ جلسة عمل بويرشيل جديدة.وهذا لن يستمر بعد تلك الدورة، حتى نتمكن من تشغيل بويرشيل مثل هذا كلما كنا بحاجة دون إضعاف الوضع الأمني العام للنظام.الآن بعد أن قمنا بتثبيت ذلك، دعونا نذهب آخر في ذلك:
الآن أن البرنامج النصي قد نفذت بشكل صحيح، يمكننا أن نرى ما يفعله في الواقع.إنها تخبرنا أننا ندير البرنامج النصي كمستخدم محدود.يتم تشغيل البرنامج النصي في الواقع من قبل حساب مع أذونات المسؤول، ولكن التحكم في حساب المستخدم هو الحصول على الطريق.على الرغم من أن تفاصيل كيفية التحقق من البرنامج النصي للوصول المسؤول خارج نطاق هذه المقالة، وهنا التعليمات البرمجية التي يتم استخدامها للمظاهرة:
إذا( ([security. Principal. WindowsPrincipal] [Security. Principal. WindowsIdentity]: : جيتكورنت() إيسينرول( [Security. Principal. WindowsBuiltInRole] "أدمينيستراتور")){ ورايت-أوتبوت 'رونينغ أس أدمينيستراتور!'} إلس{ ورايت-أوتبوت 'رونينغ ليميتد!'} إيقاف مؤقتستلاحظ أيضا أن هناك الآن اثنين"إيقاف مؤقت" العمليات في إخراج البرنامج النصي - واحد من البرنامج النصي بويرشيل، وواحد من ملف الدفعي.والسبب في ذلك سيكون أكثر وضوحا في الخطوة التالية.
الخطوة 3: الحصول على وصول المسؤول.
إذا كان البرنامج النصي الخاص بك لا يعمل أي أوامر تتطلب الارتفاع، وكنت متأكدا من أنك لن داعي للقلق حول الملفات الشخصية المخصصة لأي شخص في الطريق، يمكنك تخطي بقية هذا.إذا كنت تقوم بتشغيل بعض كمدليتس على مستوى المسؤول على الرغم من ذلك، سوف تحتاج هذه القطعة.
لسوء الحظ، لا توجد طريقة لتحريك واك للارتفاع من داخل ملف دفعي أو جلسة سمد.ومع ذلك، بويرشيل لا تسمح لنا للقيام بذلك مع بدء العملية.عند استخدامها مع "-Verb روناس" في حججها، ستارت-بروسيس محاولة لإطلاق تطبيق مع أذونات المسؤول.إذا لم تكن جلسة بويرشيل مرتفعة بالفعل، سيؤدي ذلك إلى تشغيل موجه واك.لاستخدام هذا من ملف دفعي لإطلاق البرنامج النصي لدينا، ونحن في نهاية المطاف تفريخ عمليتين بويرشيل - واحد لاطلاق النار من بدء عملية وآخر، التي أطلقتها ستارت-بروسيس، لتشغيل البرنامج النصي.يجب تغيير السطر الثاني من ملف الدفعات إلى هذا:
PowerShell.exe -Command "& أمب؛{ ستارت-بروسيس PowerShell.exe -ArgumentList '-ExecutionPolicy بايباس -File" "٪ ~ dpn0.ps1" "' -Verbروناس} "عند تشغيل ملف الدفعي، سيظهر السطر الأول من المخرجات من البرنامج النصي لملف تعريف بويرشيل.بعد ذلك، سيكون هناك موجه واك عند بدء تشغيل عملية لإطلاق MyScript.ps1.
بعد النقر فوق موجه واك، سوف تفرخ مثيل بويرشيل الجديد.لأن هذا هو مثيل جديد، بالطبع، سنرى مرة أخرى إشعار البرنامج النصي الملمح.ثم، يتم تشغيل MyScript.ps1 ونرى أننا بالفعل في جلسة مرتفعة.
وهناك سبب لدينا اثنين من توقف في هنا أيضا.إذا لم يكن واحد في البرنامج النصي بويرشيل، كنا لن نرى إخراج البرنامج النصي - نافذة بويرشيل سوف يطفو على السطح فقط وتختفي بمجرد الانتهاء من البرنامج النصي تشغيل.ودون وقفة في ملف الدفعي، ونحن لن تكون قادرة على معرفة ما إذا كان هناك أي أخطاء إطلاق بويرشيل في المقام الأول.
الخطوة 4: التجول حول ملفات تعريف بويرشيل المخصصة.
دعونا نتخلص من هذا الملف الشخصي المخصص سيئة الآن، يجب علينا؟هنا، فإنه لا يكاد يكون مصدر إزعاج، ولكن إذا كان الملف الشخصي بويرشيل المستخدم يغير الإعدادات الافتراضية، المتغيرات، أو وظائف بطرق قد لا يكون متوقعا مع السيناريو الخاص بك، فإنها يمكن أن تكون مزعجة حقا.انها أبسط من ذلك بكثير لتشغيل البرنامج النصي الخاص بك دون الملف الشخصي تماما بحيث لم يكن لديك ما يدعو للقلق حول هذا الموضوع.للقيام بذلك، نحن بحاجة فقط إلى تغيير السطر الثاني من ملف دفعي مرة أخرى:
PowerShell.exe -NoProfile -Command "& أمبير؛{ ستارت-بروسيس PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy تجاوز -File" "٪ ~ dpn0.ps1 "" '-Verb روناس} "إضافة المعلمة -NoProfile إلى مثيلات بويرشيل التي يتم تشغيلها بواسطة البرنامج النصي يعني أن البرنامج النصي لملف تعريف المستخدم سيتم تجاوزه تماما في كلا الخطوتين وسيتم تشغيل البرنامج النصي بويرشيل فيبيئة افتراضية يمكن التنبؤ بها إلى حد ما.هنا، يمكنك أن ترى أنه لا يوجد إشعار ملف تعريف مخصص في أي من قذائف سبونيد.
إذا لم تكن بحاجة إلى حقوق المسؤول في البرنامج النصي بويرشيل، وكنت قد تخطيت الخطوة 3، يمكنك القيام به دون مثيل بويرشيل الثاني والسطر الثاني من ملف دفعي يجب أن تبدو مثل:
PowerShell.exe -NoProfile -إيكسكوتيونبوليسي بايباس -Command "& أمب؛ '٪ ~ dpn0.ps1'"سيبدو الناتج كما يلي:
( بالطبع، بالنسبة للنصوص البرمجية غير التابعة للمشرف، يمكنك القيام بدون توقف نهاية البرنامج النصي في نص بويرشيل البرمجيعند هذه النقطة أيضا لأنه يتم التقاط كل شيء في نفس نافذة وحدة التحكم وسيتم عقد هناك من قبل وقفة في نهاية ملف الدفعي على أي حال.)
الانتهاء من الملفات دفعة واحدة.
اعتمادا على ما إذا كنت بحاجة إلى أذونات المسؤول لنص بويرشيل الخاص بك( وأنت لا ينبغي أن تطلب منهم إذا لم تقم بذلك) يجب أن يبدو ملف الدفعات النهائية مثل واحد من اثنين أدناه.
بدون الوصول المسؤول:
ECHO إيقاف PowerShell.exe -NoProfile -ExecutionPolicy تجاوز -Command "& أمب؛٪٪ dpn0.ps1 '" بوسمع وصول المسؤول:
ECHO إيقاف PowerShell.exe -NoProfile -Command "& أمبير؛{ستارت-بروسيس PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy بايباس -File ""٪ ~ dpn0.ps1 ""' -Verb روناس} "بوستذكر وضع الملف الدفعي في نفس المجلد الذي تريده البرنامج النصي بويرشيللاستخدامها ل، وإعطائها نفس الاسم.ثم، بغض النظر عن النظام الذي كنت تأخذ تلك الملفات ل، عليك أن تكون قادرا على تشغيل البرنامج النصي بويرشيل دون الحاجة إلى الوحل حولها مع أي من إعدادات الأمان على النظام.هل يمكن أن تفعل بالتأكيد تلك التغييرات يدويا في كل مرة، ولكن هذا يوفر لك هذه المشكلة، وسوف لا داعي للقلق حول العودة التغييرات في وقت لاحق.
المراجع:
- تشغيل البرامج النصية بويرشيل من ملف دفعي - مدونة البرمجة دانيال شرويدر
- التحقق من أذونات المسؤول في بويرشيل - مهلا، برمجة الرجل!مدونة