سؤال

لقد كنت ألعب مع القدرات الديناميكية لـ PowerShell وكنت أتساءل شيئًا

هل يوجد أي شيء في PowerShell مماثل لـ Ruby's Method_missing () حيث يمكنك إعداد "Catch All Method" للتعامل بشكل ديناميكي للمكالمات مع الأساليب غير الموجودة على كائناتك؟

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

المحلول

لا ليس بالفعل كذلك. أظن أن الإصدار التالي من PowerShell سيصبح أكثر تمشيا مع إمكانات الإرسال الديناميكي المضافة إلى .NET 4 ولكن في الوقت الحالي ، لن يكون هذا ممكنًا في PowerShell Pure.

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

نصائح أخرى

يمكنك محاكاة ذلك ، لكنه صعب. تم وصف هذه التقنية في كتاب Lee Holmes ويتم غليها إلى نصين - Add -RelativePathcapture http://poshcode.org/2131 و New-CommandWrapper http://poshcode.org/2197.

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

يمكنك استخدام محاولة catch داخل PowerShell 2.0

http://blogs.technet.com/b/heyscriptingguy/archive/2010/03/11/hey-scripting-guy-march-11-2010.aspx

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