因为在 PowerShell 中没有
[ValidateNotNullOrWhiteSpace()]
参数属性,是不是更好用
[ValidateNotNullOrEmpty()]
作为参数属性,然后在函数内部寻找空格,或者我应该使用
[ValidateScript({ -not ([String]::IsNullOrWhiteSpace($_)) })]
作为参数属性。
我不确定 NotNullOrEmpty 属性的真正用处是什么,因为 99% 的时间,我都不希望它起作用:
My-Cmdlet -ParameterName " "
但因为 ""仍然是一个字符串,它会传递 NotNullOrEmpty 属性。
最佳答案
[ValidateNotNullOrEmpty()]
有利于完全按照它所说的去做。
要回答您的第一个问题,我将使用 [ValidateScript(...)]
你概述的方法。
要记住的一件事是 [ValidateScript()]
的错误消息通常很糟糕,对最终用户没有帮助。作为一种解决方法,您可以执行以下操作:
[ValidateScript( {
![String]::IsNullOrWhiteSpace($_) -or throw 'Your string is null or contains whitespace'
} )]
您还可以在 throw 中包含一个异常类,例如:
throw [System.ArgumentException]'Blah blah whitespace'
为什么
-or throw
语法有效PowerShell 中的 bool 运算符的工作方式与许多其他语言一样,因为它们执行“快捷方式”。一旦结果确定,他们就停止评估表达式。所以对于
$false -and $(sleep -min 10)
不需要 10 分钟,因为从不评估第二个 expr。同样,
$true -or $(something)
不会评估第二个,因为如果第一个表达式为真,它将始终为真。所以在这种情况下它是相似的。
ValidateScript
需要一个 bool 值。如果我们关心的条件为真,它就会停在那里。如果不是,则计算第二个表达式,因为这是一个 throw
它只会失败,但在这种情况下,您可以控制失败消息(如果需要,还可以控制异常类)。
关于powershell - 我应该使用 [ValidateNotNullOrEmpty()] 然后在函数中查找空格,还是使用 [ValidateScript(...)]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29903955/