Powershell الأخطاء:هل هناك طريقة فخ "القيادة" لم يتم العثور على أخطاء في العرف وظيفة ؟

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

سؤال

الخلفية:

لنفترض لدي powershell وظيفة أن يفهم ويفسر small_commands مثل:

todolist.additem/title=shopping/body=get milk

لنفترض كذلك أن لا استدعاء الدالة مثل هذا:

myfunc [small_command goes here]

السؤال: هل هناك طريقة أستطيع أن اكتب في small_command والتي لا تزال powershell الاحتجاج myfunc ، حتى إذا نسيت أن البادئة الصغيرة الأمر مع 'myfunc'?يبدو أن هذا يمكن أن تعمل إذا كان هناك طريقة فخ "القيادة" لم يتم العثور على أخطاء.

الفكرة العامة وراء هذا السؤال هو القدرة على التعافي من الأمر لم يتم العثور على أخطاء عن طريق تمرير المخالف سطر الأوامر إلى وظيفة التي يمكن أن محاولة "استعادة" من الخطأ.

ملاحظة: كما نرحب بأي نقد هذا النهج أو أفكار بديلة.

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

المحلول

يمكنك فخ CommandNotFound باستخدام فخ بيان و تحديد استثناء أنت محاصرة

& {
    trap [Management.Automation.CommandNotFoundException] 
    {
        "Code to Run here"; 
        (get-history);
        continue
    } 
    NotACommand
    }

هذا كود انشاء فخا CommandNotFoundException و عندما يضرب NotACommand "الأمر" فإنه سيتم استدعاء فخ البيان تشغيل التعليمات البرمجية في الكتلة التي لديها "كود لتشغيل هنا" ثم أنها سوف تستمر.

الشيء الوحيد الذي أنا لست متأكدا من أن يكون الوصول إلى سطر الأوامر الذي رمى execption.ربما باستخدام الحصول على التاريخ.

نصائح أخرى

سوف تحتاج إلى الاسم المستعار/script كل small_command ... لتشغيل myfun small_command ....

الأسماء المستعارة قد تساعد ، مع كتابة رئيسية تبحث في $MyInvocation, إذا لم يكن هذا هو إعادة تعيين الاسم المستعار.

للأسف لا يوجد "أخيرة" القيادة هوك في powershell.لقد طلبت من الفريق النظر في مثل هذه الميزة على الرغم ولكن يبقى أن نرى ما إذا كان v3 سوف تحتوي على هذه الميزة.

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

-Oisin

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