2011-03-28 14 views
5

Estoy estudiando las funciones de powershell y sus parámetros de validación. Sin embargo, no puedo entender si son realmente útiles.son los parámetros de validación realmente útiles?

Hago un simple ejemplo.

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

get-choice k 

Esta función me devuelve este error:

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 

Si no se especifica un conjunto válido de valores que puedo comprobar a dentro de mi código:

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 

y consigo un mensaje más amigable:

you must choose between yes and no 

En primer lugar, me gustaría saber si es posible personalizar el mensaje de error usando validateset. Entonces espero que alguien pueda explicar por qué tendría que preferir el primer acercamiento. Gracias por adelantado.

Respuesta

6

Algunas razones por las que utilizar la validación estándar:

  • código declarativa; mucho más fácil de leer entonces el if comunicado
  • mucho más corto (4 líneas de código en comparación con 1 línea con solamente return declaración)
  • el código personalizado puede tener algunos errores
  • más tarde en Vx de PowerShell que podría haber algún encargo mensajes de validación (soñando)
  • ...

Verificar Better error messages for PowerShell ValidatePattern (?) - mensaje por @jaykul. Verá cómo puede personalizar el mensaje de error. Está un poco orientado al desarrollador, pero vale la pena leerlo.

+0

También diría que el mensaje de error de ValidateSet es mucho más amigable que cualquier otra cosa que usted pueda hacer. Plus ValidateSet agregará cierta capacidad de expansión de pestañas si sus usuarios usan PowerTab. – JasonMArcher

+0

Gracias veru mucho stej. Tu explicación ha sido muy clara. Leí el enlace, pero está fuera de mis conocimientos actuales. Gracias de nuevo :) –

2

La ventaja de utilizar la validación de parámetros es que no tiene que hacerlo usted mismo. Es un código aburrido y repetitivo que ya no necesita ser escrito ni probado. Una gran victoria en mi libro, a pesar de que da como resultado mensajes de error menos amigables.

puede escribir algún documentación de ayuda para su función, de modo de que el usuario puede escribir help get-choice2, y ver una explicación de lo que significa que el parámetro:

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 
} 

Run help about_comment_based_help para más detalles, o ver el MSDN documentation.

+0

+1 Gracias incluso a usted por el tiempo que me ha dedicado. –

Cuestiones relacionadas