كيف يمكنني تحديد ما إذا كان PowerShell Cmdlet المعلمة القيمة المحددة لذلك.

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

سؤال

في PowerShell 1.0 إذا كان لدي cmdlet المعلمة من نوع التعداد ما هو الأسلوب المستحسن لاختبار ما إذا كان المستخدم المحدد أن المعلمة على cmdlet سطر الأوامر ؟ على سبيل المثال:

MyEnum : int { No = 0, Yes = 1, MaybeSo = 2 }

class DoSomethingCommand : PSCmdlet
...
private MyEnum isEnabled;

[Parameter(Mandatory = false)]
public MyEnum IsEnabled
{
    get { return isEnabled; }
    set { isEnabled = value; }
}

protected override void ProcessRecord()
{
    // How do I know if the user passed -IsEnabled <value> to the cmdlet?
}

هل هناك أي طريقة للقيام بذلك دون الحاجة إلى البذور isEnabled مع دمية قيمة ؟ افتراضيا سيكون تساوي 0 و أنا لا أريد أن البذور كل معلمة أو إضافة دمية القيمة إلى التعداد.لقد يحتمل أن تكون حصلت العديد من cmdlets مع 100 من المعلمات ، يجب أن يكون هناك طريقة أفضل.هذا هو ذات الصلة هذا السؤال ولكن كنت أبحث عن نظافة طريقة للقيام بذلك.شكرا

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

المحلول

في هذه الحالة, وأود أن استخدام nullable التفاف حول نوع التعداد على سبيل المثال

[Parameter(Mandatory = false)]
public MyEnum? IsEnabled { get; set; }

ملاحظة ؟ التعديل على MyEnum.ثم يمكنك اختبار ما إذا كان يتم تعيين مثل ذلك:

if (this.IsEnabled.HasValue) { ... }

نصائح أخرى

PowerShell جانبا ، فإنه لم اسلوب جيد لاستخدام 0 في هذا الطريق.يجب عليك دائما استخدام 0 أنسب الافتراضي.في هذه الحالة ، الأنسب الافتراضي يجب أن يكون شيئا مثل "ضبطه."

هذا في نهاية المطاف هو أن تفعل شيئا مع PowerShell وتفعل كل شيء مع الترميز جيدة الممارسات .صافي.

  • Oisin

كخيار يمكنك استخدام $PSBoundParameters جمع للتحقق ما إذا كان تمريرها إلى الأسلوب.

دعونا نفترض أن لدينا ملف json مثل التالية { "p1": "value1", "p2": "value2" } ونحن نريد أن إنشاء دالة تقبل المعلمة p1 و p2 وتحديث قيمة p1 و p2 في الملف إذا تم تمريرها إلى الدالة.دعنا نقول هذه القيم يمكن أن تكون null و وجود تلك القيم null لا يعادل لم يمر عليهم.

على سبيل المثال Update-Values -p1 $null يجب تحديث p1 إلى null و يجب أن لا تغيير p2.

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

على سبيل المثال - كيفية اكتشاف ما إذا كان يتم تمرير المعلمة ، معلمة اختيارية التي يمكن أن يقبل null كما قيمة ؟

Function Update-Values ($p1, $p2) {
    If($PSBoundParameters.ContainsKey("p1")) {
        Write-Host "p1 passed"
    }
    else {
        Write-Host "p1 not passed"
    }
    If($PSBoundParameters.ContainsKey("p2")) {
        Write-Host "p2 passed"
    }
    else {
        Write-Host "p2 not passed"
    }
}

ثم إذا قمت بتشغيل وظيفة باستخدام المعلمة التالية:

Update-Values -p1 $null
# Update-Values -p1 "something"

ونتيجة لذلك سوف ترى:

p1 passed
p2 not passed

يمكنك قراءة بلوق وظيفة هنا: كيفية تحديد ما إذا كان يتم تمرير المعلمة إلى Powershell Cmdlet.

الشيء الوحيد الذي أستطيع أن أرى أن تعديل التعداد بحيث القيمة 0 هو اسمه غير معروف أو شيء من هذا القبيل.

المشكلة هي أن enums فقط الأعداد الصحيحة في الخلفية و الاعداد الصحيحه هي أنواع قيمة.نتيجة مؤسفة هي أن أنهم بحاجة إلى أن يكون قيمة وهذه القيمة هي 0 بشكل افتراضي.

أعلم أن هذا الموضوع قديم قليلا الآن, ولكن أفضل طريقة للقيام بذلك هو أن تعلن المعلمة باستخدام SwitchParameter نوع.ثم المستخدمين لا يجب أن تمر -IsEnabled كانوا فقط إضافة شيء مثل تمكين كمعلمة.

ثم اختبار .IsPresent الممتلكات الخاصة بك المعلمة لمعرفة ما إذا كان المتصل وأضاف-تمكين الدعوة إلى cmdlet.

bool wasSpecified = MyInvocation.BoundParameters.ContainsKey("IsEnabled");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top