我应该使用[ValidateNotNullOrEmpty()]然后在函数中查找空格,还是使用[ValidateScript(...)]?

时间:2015-04-27 19:06:16

标签: powershell

因为在PowerShell中没有

image(A, sizeOfCell=10)

参数属性,最好使用

[ValidateNotNullOrWhiteSpace()]

作为参数属性,然后查找函数内的空格,或者我应该使用

[ValidateNotNullOrEmpty()]

作为参数属性。

我不确定NotNullOrEmpty属性真正有用的是什么,因为99%的时间,我不想让它永远有效:

[ValidateScript({ -not ([String]::IsNullOrWhiteSpace($_)) })]

但是因为“”仍然是一个字符串,它将传递NotNullOrEmpty属性。

2 个答案:

答案 0 :(得分:6)

[ValidateNotNullOrEmpty()]可以完全按照它所说的那样做。

要回答您的第一个问题,我会使用您概述的[ValidateScript(...)]方法。

要记住的一件事是[ValidateScript()]的错误消息通常很糟糕,并没有帮助最终用户。作为解决方法,您可以这样做:

[ValidateScript( { 
    ![String]::IsNullOrWhiteSpace($_) -or throw 'Your string is null or contains whitespace' 
} )]

您还可以在throw中包含一个异常类:

throw [System.ArgumentException]'Blah blah whitespace'

答案 1 :(得分:0)

一个简单的解决方法是仅Trim()空白并在[string]::IsNullOrEmpty()内调用[ValidateScript()]

[ValidateScript({
    if ([string]::IsNullOrEmpty($_.Trim()))
    {
        throw "Your string is null or empty."
    } else {
        $true
    }
})]

这将处理所有$null""" "的情况,因为所有空白" "都将被转换为""