powershell必需参数在null时抛出错误

时间:2017-06-09 17:39:17

标签: powershell

我很担心在强制变量保持为空的情况下如何进行错误处理。

function parse-com{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$True)]
        [string[]]$list
     )
...

在这种情况下,如果没有为$ list传递参数,那么我会被提示,但如果我只是按Enter键(将null传递给$ list),那么我会抛出一个错误。我宁愿做的是抛出一个用法语句和/或优雅地退出。实施例...

PS C:\Users\memyself> parse-com
cmdlet parse-com at command pipeline position 1
Supply values for the following parameters:
list[0]: 
parse-com : Cannot bind argument to parameter 'list' because it is an empty array.
At line:1 char:1
+ parse-com
+ ~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [parse-com], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyArrayNotAllowed,parse-com

1 个答案:

答案 0 :(得分:3)

传递$null值时,满足Mandatory要求。如果您希望该命令在执行之前失败,那么您应该使用@JeffZeitlin建议的验证。

听起来你需要验证的是,值不是$null,也不是空数组。您可以使用[ValidateNotNullOrEmpty()]

function parse-com{
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory=$True)]
        [ValidateNotNullOrEmpty()]
        [string[]]$list
    )