2011-03-28 21 views
5

Powershell işlevlerini ve geçerli parametrelerini inceliyorum. Ancak gerçekten yararlı olup olmadığını anlayamıyorum.doğrulama parametreleri gerçekten faydalı?

Basit bir örnek oluşturuyorum.

function get-choice(
[parameter(Mandatory=$true)][String][ValidateSet('Y','N')]$choice 
) 
{return $choice} 

get-choice k 

Bu fonksiyon bana bu hata verir:

get-choice : Impossibile convalidare l'argomento sul parametro 'choice'. L'argomento "k" non appartiene al set "Y,N" specificato dall'attributo ValidateSet. Fornire un argomento inclu 
so nel set ed eseguire di nuovo il comando. 
In riga:6 car:11 
+ get-choice <<<< k 
    + CategoryInfo   : InvalidData: (:) [get-choice], ParameterBindingValidationException 
    + FullyQualifiedErrorId : ParameterArgumentValidationError,get-choice 

benim kodu içinde bunları kontrol edebilirsiniz değerlerin geçerli bir grubu belirtmek yoksa:

function get-choice2(
[parameter(Mandatory=$true)][String]$choice 
) { 
    if($choice -ne 'y' -and $choice -ne 'n') { 
     write-host "you must choose between yes and no" 
     return 
    } 
return $choice 
} 

get-choice2 k 

ve ben olsun daha uygun mesaj:

Öncelikle validateset kullanarak hata mesajını özelleştirmek mümkün olup olmadığını bilmek istiyorum. O zaman birisinin neden ilk yaklaşımı tercih etmem gerektiğini açıklayabileceğini umuyorum. Şimdiden teşekkürler.

cevap

6

nedenlerinden bazıları, standart doğrulama kullanımı:

  • bildirim kodunu; if deyimi
  • çok daha kısa
  • özel kod
  • sonra PowerShell Vx bazı hatalar olabilir bazı özel olabilir (sadece return ifadesiyle 1 hattına kıyasla kod 4 hat) ardından okumak için çok daha kolay doğrulama mesajları (sadece rüya)
  • ...

Kontrol Better error messages for PowerShell ValidatePattern (?) - @jaykul tarafından yazılan. Hata mesajını nasıl özelleştirebileceğinizi göreceksiniz. Biraz geliştirici odaklı, ama okumaya değer.

+0

Ayrıca, ValidateSet'in hata mesajının yapabileceğiniz her şeyden çok daha kolay olduğunu da söyleyebilirim. Kullanıcılarınız PowerTab kullanıyorsa, Artı ValidateSet bazı sekme genişletme özelliğini ekleyecektir. – JasonMArcher

+0

Teşekkür ederim çok stej. Açıklamanız çok açıktı. Bağlantıyı okudum ama şu andaki bilgilerimin dışında. Tekrar teşekkürler :) –

2

Parametre doğrulaması kullanmanın avantajı, kendiniz yapmak zorunda olmadığınızdır. Bu, artık yazılı ve test edilmek zorunda olmayan sıkıcı, klişe kodu. Kitabımda büyük bir kazanç, daha az dostu hata iletileriyle sonuçlansa da.

O kullanıcının help get-choice2 yazabilirsiniz, böylece fonksiyon için bazı yardım belgelerine yazmak ve bu parametre ne anlama için bir açıklama görebilirsiniz: Daha fazla ayrıntı için

function get-choice(
[parameter(Mandatory=$true)][String][ValidateSet('Y','N')]$choice 
) 
{ 
    <# 
    .SYNOPSIS 
    Gets the user's choice. 

    .PARAMETER choice 
    The choice. Must be Y or N. 
    #> 

    return $choice 
} 

Çalıştır help about_comment_based_help veya MSDN documentation bakın.

+0

+1 Bana özel zaman ayırdığınız için bile teşekkür ederiz. –