我正在研究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自定义错误消息。然后我希望有人可以解释为什么我不得不首选方法。提前谢谢。
答案 0 :(得分:6)
使用标准验证的一些原因:
if
声明return
语句相比)检查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。