验证参数真的有用吗?

时间:2011-03-28 20:47:19

标签: powershell

我正在研究powershell函数及其验证参数。但是我无法理解它们是否真的有用。

我举了一个简单的例子。

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

get-choice k

此函数返回此错误:

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

如果我没有指定一组有效的值,我可以在我的代码中检查它们:

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

我收到了更友好的消息:

you must choose between yes and no

首先,我想知道是否可以使用validateset自定义错误消息。然后我希望有人可以解释为什么我不得不首选方法。提前谢谢。

2 个答案:

答案 0 :(得分:6)

使用标准验证的一些原因:

  • 陈述性代码;更容易阅读if声明
  • 更短(4行代码与1行只有return语句相比)
  • 自定义代码可能有一些错误
  • 稍后在PowerShell的Vx中可能会有一些自定义验证消息(?)(只是在做梦)
  • ...

检查Better error messages for PowerShell ValidatePattern - 由@jaykul发帖。您将看到如何自定义错误消息。它有点面向开发人员,但值得一读。

答案 1 :(得分:2)

使用参数验证的好处是您不必自己动手。这是很多无聊的样板代码,不再需要编写和测试。在我的书中取得了巨大的成功,尽管它会导致不太友好的错误信息。

您可以为您的函数编写一些帮助文档,以便用户可以键入help get-choice2,并查看该参数的含义说明:

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
}

运行help about_comment_based_help了解更多详情,或参阅MSDN documentation